binsight-admin / app.py
Krish-Upgrix's picture
Update app.py
633b4f7 verified
# Final with gratitude email
import streamlit as st
import firebase_admin
from firebase_admin import credentials, db
import base64
from io import BytesIO
from PIL import Image
import requests
# Firebase
if not firebase_admin._apps:
cred = credentials.Certificate("firebase_credentials.json")
firebase_admin.initialize_app(cred, {
'databaseURL': 'https://binsight-beda0-default-rtdb.asia-southeast1.firebasedatabase.app/'
})
# Firebase Auth REST API
FIREBASE_AUTH_URL = "https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=AIzaSyCwYZcPI5pltxxHiMUxjmQUNIaObNXWydw"
# Mailgun Settings
MAILGUN_API_KEY = "9530f415a53e78317892af32cf3c4b93-79295dd0-b3f02e29" # Replace with your Mailgun API key
MAILGUN_DOMAIN = "sandboxb2e22240ec8a4b468825577fcb967a85.mailgun.org" # Replace with your Mailgun domain
Email_Domain = "Binsight.com"
def send_gratitude_email(to_email, location):
try:
return requests.post(
f"https://api.mailgun.net/v3/{MAILGUN_DOMAIN}/messages",
auth=("api", MAILGUN_API_KEY),
data={
"from": f"Binsight <noreply@{Email_Domain}>",
"to": [to_email],
"subject": "🎉 Thank You for Your Contribution!",
"text": f"Thank you for reporting the dustbin at {location}. Your help is invaluable in keeping our surroundings clean. 🌱"
}
)
except Exception as e:
return None
# Streamlit UI
st.title("Binsight Admin Dashboard")
if "authenticated" not in st.session_state:
st.session_state.authenticated = False
if "user" not in st.session_state:
st.session_state.user = None
def login():
st.subheader("Login")
email = st.text_input("Email")
password = st.text_input("Password", type="password")
if st.button("Login"):
payload = {"email": email, "password": password, "returnSecureToken": True}
response = requests.post(FIREBASE_AUTH_URL, json=payload)
if response.status_code == 200:
st.session_state.authenticated = True
st.session_state.user = email
st.rerun()
else:
st.error("Invalid credentials or user does not exist.")
def logout():
st.session_state.authenticated = False
st.session_state.user = None
st.rerun()
if st.session_state.authenticated:
st.sidebar.button("Logout", on_click=logout)
st.sidebar.header("Filters")
filter_status = st.sidebar.selectbox("Filter by Status", ["All", "Pending", "Allocated", "Completed"], index=0)
dustbins_ref = db.reference("dustbins")
dustbins = dustbins_ref.get() or {}
filtered_dustbins = {
key: value for key, value in dustbins.items()
if filter_status == "All" or value["status"] == filter_status
}
st.subheader(f"Showing {filter_status.lower()} dustbins ({len(filtered_dustbins)})")
for key, value in filtered_dustbins.items():
with st.expander(f"📍 {value['address']}"):
st.write(f"**Latitude**: {value['latitude']}")
st.write(f"**Longitude**: {value['longitude']}")
st.write(f"**Status**: {value['status']}")
if "image" in value:
image_data = base64.b64decode(value["image"])
st.image(Image.open(BytesIO(image_data)), caption="Dustbin Image", use_column_width=True)
if value["status"] == "Pending":
truck_email = st.text_input(f"Allocate Truck Email for {key}", key=f"truck_{key}")
if st.button(f"Allocate Truck", key=f"allocate_{key}"):
if truck_email:
dustbins_ref.child(key).update({
"allocated_truck": truck_email,
"status": "Allocated"
})
st.success("Truck allocated successfully!")
else:
st.error("Please enter a valid truck email.")
if value["status"] == "Allocated":
if st.button("Mark as Completed", key=f"complete_{key}"):
dustbins_ref.child(key).update({"status": "Completed"})
st.success("Status marked as Completed!")
if value["status"] == "Completed":
if st.button("Send Gratitude Email", key=f"gratitude_{key}"):
email = value.get("email")
location = value.get("address", "Unknown Location")
if email:
response = send_gratitude_email(email, location)
if response and response.status_code == 200:
st.success("✅ Gratitude email sent successfully!")
else:
st.error("❌ Failed to send email.")
else:
st.warning("⚠️ Email not available.")
else:
login()
# Best version without back button
# import streamlit as st
# import firebase_admin
# from firebase_admin import credentials, db
# import base64
# from io import BytesIO
# from PIL import Image
# import requests
# # Initialize Firebase Realtime Database
# if not firebase_admin._apps:
# cred = credentials.Certificate("firebase_credentials.json")
# firebase_admin.initialize_app(cred, {
# 'databaseURL': 'https://binsight-beda0-default-rtdb.asia-southeast1.firebasedatabase.app/'
# })
# # Firebase Authentication REST API
# FIREBASE_AUTH_URL = "https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=AIzaSyCwYZcPI5pltxxHiMUxjmQUNIaObNXWydw"
# # Streamlit UI
# st.title("Binsight Admin Dashboard")
# # Session state for authentication
# if "authenticated" not in st.session_state:
# st.session_state.authenticated = False
# if "user" not in st.session_state:
# st.session_state.user = None
# # Authentication UI
# def login():
# st.subheader("Login")
# email = st.text_input("Email")
# password = st.text_input("Password", type="password")
# if st.button("Login"):
# payload = {"email": email, "password": password, "returnSecureToken": True}
# response = requests.post(FIREBASE_AUTH_URL, json=payload)
# if response.status_code == 200:
# st.session_state.authenticated = True
# st.session_state.user = email
# st.rerun()
# else:
# st.error("Invalid credentials or user does not exist.")
# # Logout functionality
# def logout():
# st.session_state.authenticated = False
# st.session_state.user = None
# st.rerun()
# # Main Dashboard
# if st.session_state.authenticated:
# st.sidebar.button("Logout", on_click=logout)
# st.sidebar.header("Filters")
# filter_status = st.sidebar.selectbox("Filter by Status", ["All", "Pending", "Allocated", "Completed"], index=0)
# dustbins_ref = db.reference("dustbins")
# dustbins = dustbins_ref.get() or {}
# filtered_dustbins = {
# key: value for key, value in dustbins.items()
# if filter_status == "All" or value["status"] == filter_status
# }
# st.subheader(f"Showing {filter_status.lower()} dustbins ({len(filtered_dustbins)})")
# for key, value in filtered_dustbins.items():
# with st.expander(f"📍 {value['address']}"):
# st.write(f"**Latitude**: {value['latitude']}")
# st.write(f"**Longitude**: {value['longitude']}")
# st.write(f"**Status**: {value['status']}")
# # st.write(f"**User**: {value['user_email']}")
# # Display Image
# if "image" in value:
# image_data = base64.b64decode(value["image"])
# st.image(Image.open(BytesIO(image_data)), caption="Dustbin Image", use_column_width=True)
# if value["status"] == "Pending":
# truck_email = st.text_input(f"Allocate Truck Email for {key}", key=f"truck_{key}")
# if st.button(f"Allocate Truck", key=f"allocate_{key}"):
# if truck_email:
# dustbins_ref.child(key).update({
# "allocated_truck": truck_email,
# "status": "Allocated"
# })
# st.success("Truck allocated successfully!")
# else:
# st.error("Please enter a valid truck email.")
# else:
# login()
# import streamlit as st
# import firebase_admin
# from firebase_admin import credentials, db
# import base64
# from io import BytesIO
# from PIL import Image
# import requests
# # Initialize Firebase Realtime Database
# if not firebase_admin._apps:
# cred = credentials.Certificate("firebase_credentials.json")
# firebase_admin.initialize_app(cred, {
# 'databaseURL': 'https://binsight-beda0-default-rtdb.asia-southeast1.firebasedatabase.app/'
# })
# # Firebase Authentication REST API
# FIREBASE_AUTH_URL = "https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=AIzaSyCwYZcPI5pltxxHiMUxjmQUNIaObNXWydw"
# # Streamlit UI
# st.title("Binsight Admin Dashboard")
# # Session state for authentication
# if "authenticated" not in st.session_state:
# st.session_state.authenticated = False
# if "user" not in st.session_state:
# st.session_state.user = None
# # Authentication UI
# def login():
# st.subheader("Login")
# email = st.text_input("Email")
# password = st.text_input("Password", type="password")
# if st.button("Login"):
# payload = {"email": email, "password": password, "returnSecureToken": True}
# response = requests.post(FIREBASE_AUTH_URL, json=payload)
# if response.status_code == 200:
# st.session_state.authenticated = True
# st.session_state.user = email
# st.rerun()
# else:
# st.error("Invalid credentials or user does not exist.")
# # Logout functionality
# def logout():
# st.session_state.authenticated = False
# st.session_state.user = None
# st.rerun()
# # Main Dashboard
# if st.session_state.authenticated:
# st.sidebar.button("Logout", on_click=logout)
# st.sidebar.header("Filters")
# filter_status = st.sidebar.selectbox("Filter by Status", ["All", "Pending", "Allocated", "Completed"], index=0)
# dustbins_ref = db.reference("dustbins")
# dustbins = dustbins_ref.get() or {}
# filtered_dustbins = {
# key: value for key, value in dustbins.items()
# if filter_status == "All" or value["status"] == filter_status
# }
# st.subheader(f"Showing {filter_status.lower()} dustbins ({len(filtered_dustbins)})")
# for key, value in filtered_dustbins.items():
# with st.expander(f"📍 {value['address']}"):
# st.write(f"**Latitude**: {value['latitude']}")
# st.write(f"**Longitude**: {value['longitude']}")
# st.write(f"**Status**: {value['status']}")
# # st.write(f"**User**: {value['user_email']}")
# # Display Image
# if "image" in value:
# image_data = base64.b64decode(value["image"])
# st.image(Image.open(BytesIO(image_data)), caption="Dustbin Image", use_column_width=True)
# if value["status"] == "Pending":
# truck_email = st.text_input(f"Allocate Truck Email for {key}", key=f"truck_{key}")
# if st.button(f"Allocate Truck", key=f"allocate_{key}"):
# if truck_email:
# dustbins_ref.child(key).update({
# "allocated_truck": truck_email,
# "status": "Allocated"
# })
# st.success("Truck allocated successfully!")
# else:
# st.error("Please enter a valid truck email.")
# # Back button to redirect to dashboard
# st.markdown("<br>", unsafe_allow_html=True)
# st.markdown("<a href='https://binsight.onrender.com/dashboard.html' target='_self' style='text-decoration:none;'><button style='padding: 10px 20px; font-size: 16px;'>⬅ Back to Dashboard</button></a>", unsafe_allow_html=True)
# else:
# login()
## Below code is working but it is not having login of admin. that is accessible to anyone..
# import streamlit as st
# import firebase_admin
# from firebase_admin import credentials, db
# import base64
# from io import BytesIO
# from PIL import Image
# # Initialize Firebase (Check if already initialized)
# if not firebase_admin._apps:
# cred = credentials.Certificate("firebase_credentials.json")
# firebase_admin.initialize_app(cred, {
# 'databaseURL': 'https://binsight-beda0-default-rtdb.asia-southeast1.firebasedatabase.app/'
# })
# st.title("Binsight Admin Dashboard")
# st.sidebar.header("Filters")
# filter_status = st.sidebar.selectbox("Filter by Status", ["All", "Pending", "Allocated", "Completed"], index=0)
# dustbins_ref = db.reference("dustbins")
# dustbins = dustbins_ref.get() or {}
# filtered_dustbins = {
# key: value for key, value in dustbins.items()
# if filter_status == "All" or value["status"] == filter_status
# }
# st.subheader(f"Showing {filter_status.lower()} dustbins ({len(filtered_dustbins)})")
# for key, value in filtered_dustbins.items():
# with st.expander(f"📍 {value['address']}"):
# st.write(f"**Latitude**: {value['latitude']}")
# st.write(f"**Longitude**: {value['longitude']}")
# st.write(f"**Status**: {value['status']}")
# st.write(f"**User**: {value['user_email']}")
# # Display Image
# if "image" in value:
# image_data = base64.b64decode(value["image"])
# st.image(Image.open(BytesIO(image_data)), caption="Dustbin Image", use_column_width=True)
# if value["status"] == "Pending":
# truck_email = st.text_input(f"Allocate Truck Email for {key}", key=f"truck_{key}")
# if st.button(f"Allocate Truck", key=f"allocate_{key}"):
# if truck_email:
# dustbins_ref.child(key).update({
# "allocated_truck": truck_email,
# "status": "Allocated"
# })
# st.success("Truck allocated successfully!")
# else:
# st.error("Please enter a valid truck email.")
# # Best without Image
# # import streamlit as st
# # import firebase_admin
# # from firebase_admin import credentials, db
# # # Initialize Firebase
# # if not firebase_admin._apps:
# # cred = credentials.Certificate("firebase_credentials.json")
# # firebase_admin.initialize_app(cred, {
# # 'databaseURL': 'https://binsight-beda0-default-rtdb.asia-southeast1.firebasedatabase.app/'
# # })
# # # Streamlit Dashboard
# # st.title("Binsight Admin Dashboard")
# # st.sidebar.header("Filters")
# # filter_status = st.sidebar.selectbox("Filter by Status", ["All", "Pending", "Allocated", "Completed"], index=0)
# # dustbins_ref = db.reference("dustbins")
# # dustbins = dustbins_ref.get() or {}
# # filtered_dustbins = {
# # key: value for key, value in dustbins.items()
# # if filter_status == "All" or value["status"] == filter_status
# # }
# # st.subheader(f"Showing {filter_status.lower()} dustbins ({len(filtered_dustbins)})")
# # for key, value in filtered_dustbins.items():
# # with st.expander(f"📍 {value['address']}"):
# # st.write(f"**Latitude**: {value['latitude']}")
# # st.write(f"**Longitude**: {value['longitude']}")
# # st.write(f"**Status**: {value['status']}")
# # st.write(f"**User**: {value['user_email']}")
# # if value["status"] == "Pending":
# # truck_email = st.text_input(f"Allocate Truck Email for {key}", key=f"truck_{key}")
# # if st.button(f"Allocate Truck", key=f"allocate_{key}"):
# # if truck_email:
# # dustbins_ref.child(key).update({
# # "allocated_truck": truck_email,
# # "status": "Allocated"
# # })
# # st.success("Truck allocated successfully!")
# # else:
# # st.error("Please enter a valid truck email.")
# # import streamlit as st
# # import firebase_admin
# # from firebase_admin import credentials, db
# # import requests
# # from datetime import datetime
# # # Initialize Firebase
# # if not firebase_admin._apps:
# # cred = credentials.Certificate("firebase_credentials.json") # Path to your Firebase JSON
# # firebase_admin.initialize_app(cred, {
# # 'databaseURL': 'https://binsight-beda0-default-rtdb.asia-southeast1.firebasedatabase.app/' # Replace with your Firebase Realtime Database URL
# # })
# # # Function to send email using Mailgun
# # def send_email(recipient_email, subject, message):
# # MAILGUN_API_KEY = "9530f415a53e78317892af32cf3c4b93-79295dd0-b3f02e29"
# # MAILGUN_DOMAIN = "sandboxb2e22240ec8a4b468825577fcb967a85.mailgun.org"
# # response = requests.post(
# # f"https://api.mailgun.net/v3/{MAILGUN_DOMAIN}/messages",
# # auth=("api", MAILGUN_API_KEY),
# # data={
# # "from": f"Binsight Admin <mailgun@{MAILGUN_DOMAIN}>",
# # "to": recipient_email,
# # "subject": subject,
# # "text": message,
# # },
# # )
# # return response.status_code == 200
# # # Streamlit Dashboard
# # st.title("Binsight Admin Dashboard")
# # st.sidebar.header("Filters")
# # # Filter status
# # filter_status = st.sidebar.selectbox("Filter by Status", ["All", "Pending", "Allocated", "Completed"], index=0)
# # # Firebase Reference
# # dustbins_ref = db.reference("dustbins")
# # dustbins = dustbins_ref.get()
# # # Filter dustbins
# # if dustbins:
# # filtered_dustbins = {
# # key: value
# # for key, value in dustbins.items()
# # if filter_status == "All" or value["status"] == filter_status
# # }
# # else:
# # filtered_dustbins = {}
# # if filtered_dustbins:
# # st.subheader(f"Showing {filter_status.lower()} dustbins ({len(filtered_dustbins)})")
# # for key, value in filtered_dustbins.items():
# # with st.expander(f"📍 Dustbin at {value['address']}"):
# # st.write(f"**Latitude**: {value['latitude']}")
# # st.write(f"**Longitude**: {value['longitude']}")
# # st.write(f"**Classification**: {', '.join([f'{k} ({v:.2f})' for k, v in value['classification'].items()])}")
# # st.write(f"**Status**: {value['status']}")
# # if value["status"] == "Completed":
# # st.write(f"**Completed By**: {value['completed_by']}")
# # st.write(f"**Completed At**: {value.get('completed_at', 'N/A')}")
# # # Send Thank-You Email
# # user_email = st.text_input("User Email", key=f"user_email_{key}")
# # if st.button("Send Thank-You Email", key=f"thank_you_{key}"):
# # if user_email:
# # subject = "Binsight - Thank You!"
# # message = f"Dear User,\n\nThank you for providing dustbin details! The dustbin at {value['address']} has been cleaned successfully.\n\nBest regards,\nBinsight Team"
# # email_sent = send_email(user_email, subject, message)
# # if email_sent:
# # st.success("Thank-you email sent successfully!")
# # else:
# # st.error("Failed to send email. Please check Mailgun credentials.")
# # else:
# # st.error("Please enter a valid user email.")
# # else:
# # st.info(f"No dustbins found for the selected status: {filter_status}.")
# # # About Section
# # st.sidebar.write("---")
# # st.sidebar.write("👨‍💻 **Developed by Binsight Team**")
# # working best without firebase
# # import streamlit as st
# # import pandas as pd
# # import requests
# # # Function to send email using Mailgun API
# # def send_email(driver_email, longitude, latitude, location):
# # MAILGUN_API_KEY = "9530f415a53e78317892af32cf3c4b93-79295dd0-b3f02e29"
# # MAILGUN_DOMAIN = "sandboxb2e22240ec8a4b468825577fcb967a85.mailgun.org"
# # response = requests.post(
# # f"https://api.mailgun.net/v3/{MAILGUN_DOMAIN}/messages",
# # auth=("api", MAILGUN_API_KEY),
# # data={
# # "from": f"Binsight Admin <mailgun@{MAILGUN_DOMAIN}>",
# # "to": driver_email,
# # "subject": "Truck Allocation Details",
# # "text": f"Dear Driver,\n\nYou have been allocated to a new dustbin location. Here are the details:\n\nLongitude: {longitude}\nLatitude: {latitude}\nLocation: {location}\n\nThank you,\nBinsight Team",
# # },
# # )
# # if response.status_code == 200:
# # st.success(f"Email sent successfully to {driver_email}!")
# # else:
# # st.error(f"Failed to send email: {response.text}")
# # # Streamlit app configuration
# # st.set_page_config(page_title="Binsight Admin Dashboard", layout="wide")
# # # App title
# # st.title("Binsight Admin Dashboard")
# # # Dummy data for the dashboard (replace this with your database or API connection)
# # data = [
# # {"Truck No": "TR001", "Driver Name": "Krishna K", "Driver Number": "1234567890", "Driver Email": "krishnaproject23@gmail.com"},
# # {"Truck No": "TR002", "Driver Name": "Jane Smith", "Driver Number": "0987654321", "Driver Email": "jane@example.com"},
# # {"Truck No": "TR003", "Driver Name": "Mike Ross", "Driver Number": "1122334455", "Driver Email": "mike@example.com"},
# # ]
# # df = pd.DataFrame(data)
# # # Initialize session state for truck allocation details
# # if "allocation_details" not in st.session_state:
# # st.session_state["allocation_details"] = {}
# # # Display the data in a tabular format
# # st.subheader("Truck and Driver Details")
# # for index, row in df.iterrows():
# # col1, col2, col3, col4, col5 = st.columns([1, 2, 2, 3, 2])
# # with col1:
# # st.write(row["Truck No"])
# # with col2:
# # st.write(row["Driver Name"])
# # with col3:
# # st.write(row["Driver Number"])
# # with col4:
# # st.write(row["Driver Email"])
# # with col5:
# # if st.button(f"Allocate Truck {row['Truck No']}", key=f"allocate_{index}"):
# # # Store allocation state for this truck
# # st.session_state["allocation_details"][row["Truck No"]] = {
# # "longitude": "",
# # "latitude": "",
# # "location": ""
# # }
# # # Display allocation inputs for each truck
# # if st.session_state["allocation_details"]:
# # for truck_no, details in st.session_state["allocation_details"].items():
# # st.subheader(f"Allocation Details for Truck {truck_no}")
# # longitude = st.text_input("Enter Longitude", value=details["longitude"], key=f"longitude_{truck_no}")
# # latitude = st.text_input("Enter Latitude", value=details["latitude"], key=f"latitude_{truck_no}")
# # location = st.text_input("Enter Location", value=details["location"], key=f"location_{truck_no}")
# # # Update session state with new values
# # st.session_state["allocation_details"][truck_no] = {
# # "longitude": longitude,
# # "latitude": latitude,
# # "location": location
# # }
# # if st.button("Send Email", key=f"send_email_{truck_no}"):
# # if longitude and latitude and location:
# # driver_email = df.loc[df["Truck No"] == truck_no, "Driver Email"].values[0]
# # send_email(driver_email, longitude, latitude, location)
# # else:
# # st.error("Please fill all the details before sending the email.")
# # # Footer
# # st.markdown("---")
# # st.markdown(
# # "**Binsight Admin Dashboard**: Manage your waste management operations efficiently and allocate trucks seamlessly."
# # )
# # import streamlit as st
# # import pandas as pd
# # import requests
# # # Function to send email using Mailgun API
# # def send_email(driver_email, longitude, latitude, location):
# # MAILGUN_API_KEY = "9530f415a53e78317892af32cf3c4b93-79295dd0-b3f02e29"
# # MAILGUN_DOMAIN = "sandboxb2e22240ec8a4b468825577fcb967a85.mailgun.org"
# # response = requests.post(
# # f"https://api.mailgun.net/v3/{MAILGUN_DOMAIN}/messages",
# # auth=("api", MAILGUN_API_KEY),
# # data={
# # "from": f"Binsight Admin <mailgun@{MAILGUN_DOMAIN}>",
# # "to": driver_email,
# # "subject": "Truck Allocation Details",
# # "text": f"Dear Driver,\n\nYou have been allocated to a new dustbin location. Here are the details:\n\nLongitude: {longitude}\nLatitude: {latitude}\nLocation: {location}\n\nThank you,\nBinsight Team",
# # },
# # )
# # if response.status_code == 200:
# # st.success(f"Email sent successfully to {driver_email}!")
# # else:
# # st.error(f"Failed to send email: {response.text}")
# # # Streamlit app configuration
# # st.set_page_config(page_title="Binsight Admin Dashboard", layout="wide")
# # # App title
# # st.title("Binsight Admin Dashboard")
# # # Dummy data for the dashboard (replace this with your database or API connection)
# # data = [
# # {"Truck No": "TR001", "Driver Name": "Krishna K", "Driver Number": "1234567890", "Driver Email": "krishnaproject23@gmail.com"},
# # {"Truck No": "TR002", "Driver Name": "Jane Smith", "Driver Number": "0987654321", "Driver Email": "jane@example.com"},
# # {"Truck No": "TR003", "Driver Name": "Mike Ross", "Driver Number": "1122334455", "Driver Email": "mike@example.com"},
# # ]
# # df = pd.DataFrame(data)
# # # Display the data in a tabular format
# # st.subheader("Truck and Driver Details")
# # for index, row in df.iterrows():
# # col1, col2, col3, col4, col5 = st.columns([1, 2, 2, 3, 2])
# # with col1:
# # st.write(row["Truck No"])
# # with col2:
# # st.write(row["Driver Name"])
# # with col3:
# # st.write(row["Driver Number"])
# # with col4:
# # st.write(row["Driver Email"])
# # with col5:
# # if st.button(f"Allocate Truck {row['Truck No']}", key=f"allocate_{index}"):
# # # Inputs for longitude, latitude, and location
# # st.write(f"Allocating truck {row['Truck No']}...")
# # longitude = st.text_input("Enter Longitude", key=f"longitude_{index}")
# # latitude = st.text_input("Enter Latitude", key=f"latitude_{index}")
# # location = st.text_input("Enter Location", key=f"location_{index}")
# # if st.button("Send Email", key=f"send_email_{index}"):
# # if longitude and latitude and location:
# # send_email(row["Driver Email"], longitude, latitude, location)
# # else:
# # st.error("Please fill all the details before sending the email.")
# # # Footer
# # st.markdown("---")
# # st.markdown(
# # "**Binsight Admin Dashboard**: Manage your waste management operations efficiently and allocate trucks seamlessly."
# # )