import streamlit as st import psycopg2 import os from dotenv import load_dotenv from datetime import datetime # Load environment variables from .env file load_dotenv() # Connect to PostgreSQL database def connect_db(): try: return psycopg2.connect( host=os.getenv("DB_HOST"), port=os.getenv("DB_PORT", 5432), database=os.getenv("DB_NAME"), user=os.getenv("DB_USER"), password=os.getenv("DB_PASSWORD") ) except psycopg2.OperationalError as e: st.error(f"Error connecting to the database: {e}") return None # Insert user data into the "users" table def insert_user(company_name, requirements, date, status, notes, next_steps, contact_person, contact_information): conn = connect_db() cur = conn.cursor() query = """ INSERT INTO users (company_name, requirements, date, status, notes, next_steps, contact_person, contact_information) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) """ cur.execute(query, (company_name, requirements, date, status, notes, next_steps, contact_person, contact_information)) conn.commit() cur.close() conn.close() st.success("User added successfully!") # Search users based on query def search_users(query): conn = connect_db() cur = conn.cursor() search_query = """ SELECT company_name FROM users WHERE company_name ILIKE %s """ cur.execute(search_query, (f"%{query}%",)) results = cur.fetchall() cur.close() conn.close() return results # Get detailed information of a specific company def get_company_details(company_name): conn = connect_db() cur = conn.cursor() details_query = """ SELECT company_name, requirements, date, status, notes, next_steps, contact_person, contact_information FROM users WHERE company_name = %s """ cur.execute(details_query, (company_name,)) details = cur.fetchone() cur.close() conn.close() return details # Streamlit UI st.title("User Management") # Search bar search_query = st.text_input("Search", placeholder="Enter company name...", max_chars=100) if search_query: companies = search_users(search_query) if companies: st.write("**Company Suggestions:**") company_names = [row[0] for row in companies] selected_company = st.selectbox("Select a company:", company_names) if selected_company: details = get_company_details(selected_company) if details: st.subheader("Company Details") st.write(f"**Company Name:** {details[0]}") st.write(f"**Requirements:** {details[1]}") st.write(f"**Date:** {details[2]}") st.write(f"**Status:** {details[3]}") st.write(f"**Notes:** {details[4]}") st.write(f"**Next Steps:** {details[5]}") st.write(f"**Contact Person:** {details[6]}") st.write(f"**Contact Information:** {details[7]}") else: st.write("No details found.") else: st.write("No company names found.") # Form for adding a new user st.header("Add a New User") with st.form("user_form"): company_name = st.text_input("Company Name", max_chars=255) requirements = st.text_area("Requirements", height=100) date = st.date_input("Date", value=datetime.today()) status = st.text_input("Status", max_chars=50) notes = st.text_area("Notes", height=100) next_steps = st.text_area("Next Steps", height=100) contact_person = st.text_input("Contact Person", max_chars=100) contact_information = st.text_input("Contact Information (Email/Phone)", max_chars=255) # Form submission button submitted = st.form_submit_button("Add User") if submitted: if company_name and contact_person and contact_information: insert_user( company_name, requirements, date, status, notes, next_steps, contact_person, contact_information ) else: st.error("Please fill in all required fields (Company Name, Contact Person, Contact Information).")