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: ushohabbos@gmail.com", 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()) | |