Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import json | |
import asyncio | |
from datetime import datetime, timezone | |
from utils import validate_input, make_certificates | |
import pytz | |
#salom | |
# Fayl yo'li | |
DATA_FILE = 'data.json' | |
# Faylni o'qish funksiyasi | |
def load_data(): | |
try: | |
with open(DATA_FILE, 'r') as f: | |
return json.load(f) | |
except (FileNotFoundError, json.decoder.JSONDecodeError): | |
return [] | |
# Faylni yozish funksiyasi | |
def save_data(data): | |
with open(DATA_FILE, 'w') as f: | |
json.dump(data, f, indent=4) | |
async def main(): | |
st.set_page_config( | |
page_title="Sertifikatlarni olish", | |
page_icon="๐", | |
layout="wide", | |
initial_sidebar_state="auto") | |
st.sidebar.title('Conferences') | |
st.sidebar.image('image.png') | |
with open("O'zMU JF_to'plam_17-18-may_2024_1-qism.pdf", "rb") as file: | |
btn = st.sidebar.download_button( | |
label="Download conferences files Part 1", | |
data=file, | |
file_name="conferences_files part1.pdf", | |
mime="pdf", | |
type='primary', | |
use_container_width=True | |
) | |
with open("O'zMU_JF_to'plam_17_18_may_2024_2_qism.pdf", "rb") as file: | |
btn = st.sidebar.download_button( | |
label="Download conferences files Part 2", | |
data=file, | |
file_name="conferences_files part2.pdf", | |
mime="pdf", | |
type='primary', | |
use_container_width=True | |
) | |
st.sidebar.link_button("๐ง About me", url='https://t.me/shohabbosdev', type='secondary') | |
st.markdown(""" | |
<div style='text-align: center;'> | |
<h1>Konferensiya ishtirokchilari uchun sertifikat tayyorlash sahifasi</h1> | |
</div> | |
""", unsafe_allow_html=True) | |
st.markdown("<h3 align='center'><i>Ro'yxatga olish formasi</i></h3>", unsafe_allow_html=True) | |
st.markdown("---") | |
with st.form("Birinchi formamiz", clear_on_submit=True): | |
fish = st.text_input("F.I.SH", placeholder="Misol: Ulug'murodov Shoh Abbos Baxodir o'g'li", help='Bu maydonda FISH kiritiladi') | |
maqola = st.text_input("Maqola mavzuingiz", placeholder="Misol: Ma'lumotlar xavfsizligini oshirishda blockchayn texnologiyalarning o'rni", max_chars=500, help="Bu qismda maqola mavzusi lo'nda kiritilishi kerak") | |
shuba = st.selectbox( | |
"Sho'bani tanlang", | |
options=( | |
"1-sho'ba. Ta'lim tizimini takomillashtirish: dolzarb tendensiyalar va strategik yo'nalishlar", | |
"2-sho'ba. Biomuhandislik va biotexnologiyalar sohasida innovatsiyalar", | |
"3-sho'ba. Raqamli iqtisod va innovatsion axborot-kommunikatsiya texnologiyalarini joriy etishning dolzarb masalalari", | |
"4-sho'ba. Psixologiya, tabiiy va aniq fanlar sohasida dolzarb tadqiqotlar", | |
"5-sho'ba. Zamonaviy jamiyatda filologiya, tilshunoslik va didaktika", | |
"6-sho'ba. Zamonaviy gumanitar ta'limning dolzarb muammolari" | |
), | |
placeholder="O'z sho'bangizni tanlang...", help="O'z sho'bangizni tanlashda qiynalsangiz konferensiya ma'muriyatiga telefon qilishingiz mumkin: https://t.me/UzMU_JF_conf_1_2_3_shuba, https://t.me/UzMU_JF_conf_4_5_6_shuba") | |
ustun_1, ustun_2 = st.columns(2) | |
email = ustun_1.text_input("Email manzilingizni kiriting", placeholder="Misol: [email protected]", help="Elektron manzil barchangizda bo'ladi degan umiddaman") | |
phone = ustun_2.text_input("Telefon raqam", placeholder="+998931189988", help="Telefon raqamni kiriting") | |
rozilik = st.checkbox("Yuqoridagi barcha ma'lumotlar to'g'ri va aniq ekanligini tasdiqlaysizmi?") | |
taqsdiqlash = st.form_submit_button("Sertifikat olish", type='primary') | |
if taqsdiqlash and rozilik: | |
is_valid, error_message = validate_input(fish, email, maqola, phone) | |
if is_valid: | |
existing_data = load_data() | |
# Ma'lumotlar mavjudligini tekshirish | |
existing_item = next((item for item in existing_data if item["F.I.SH"] == fish or item["Email"] == email or item["Telefon raqam"] == phone), None) | |
if existing_item: | |
certificate_link = existing_item["Sertifikat manzili"] | |
sertifikat_vaqt_utc = datetime.strptime(existing_item["Sertifikat olingan vaqt"], "%Y-%m-%d %H:%M:%S").replace(tzinfo=timezone.utc) | |
sertifikat_vaqt = sertifikat_vaqt_utc.astimezone(pytz.timezone('Asia/Tashkent')) | |
st.warning(f"Siz ro'yxatdan o'tgansiz! Pastda siz olgan sertifikat nusxasi mavjud. Sertifikat olgan sana: {sertifikat_vaqt.strftime('%Y-%m-%d %H:%M:%S')}", icon='โ ๏ธ') | |
st.markdown(f"[{fish}ning sertifikat fayli]({certificate_link})") | |
else: | |
sertifikat_vaqt = datetime.now(pytz.timezone('Asia/Tashkent')).strftime("%Y-%m-%d %H:%M:%S") | |
certificate_link = await make_certificates(fish, maqola) | |
st.success("Ma'lumotlar muvaffaqiyatli saqlandi", icon='๐พ') | |
new_entry = { | |
"F.I.SH": fish, | |
"Maqola mavzusi": maqola, | |
"Sho'ba": shuba, | |
"Email": email, | |
"Telefon raqam": phone, | |
"Sertifikat manzili": certificate_link, | |
"Sertifikat olingan vaqt": sertifikat_vaqt | |
} | |
existing_data.append(new_entry) | |
try: | |
save_data(existing_data) | |
except Exception as e: | |
st.error(f"Ma'lumotlarni saqlashda xatolik yuz berdi: {e}") | |
st.markdown(f"[{fish}ning sertifikat fayli]({certificate_link})") | |
table = { | |
"F.I.SH": fish, | |
"Maqola mavzusi": maqola, | |
"Sho'ba": shuba, | |
"Email": email, | |
"Telefon raqam": phone, | |
"Sertifikat manzili": certificate_link, | |
"Sertifikat olingan vaqt": sertifikat_vaqt | |
} | |
with st.expander("Siz kiritgan ma'lumotlar bilan tanishing๐๐๐"): | |
st.table(table) | |
# Barcha ro'yxatdan o'tganlar ma'lumotlarini ko'rsatish | |
df = pd.DataFrame(existing_data) | |
with st.expander("Umumiy ro'yxat"): | |
# Telefon raqamlarni qisqartirib olish | |
df['Telefon raqam'] = df['Telefon raqam'].apply(lambda x: f"+998***{x[-4:]}") | |
st.dataframe(df) | |
else: | |
st.error(f"Xatolik nomi: {error_message}", icon='โ') | |
elif taqsdiqlash and not rozilik: | |
st.error("Ma'lumotlarni to'g'ri kiritilganligini tasdiqlang", icon='โ ') | |
if __name__ == "__main__": | |
asyncio.run(main()) | |