python -m streamlit run app_rows2.py...

← العودة
Blog Post

عنوان المحادثة: python -m streamlit run app_rows2.py...

التاريخ: 28.09.2025

التصنيف: 💻 البرمجة وتطوير البرمجيات

إجمالي الرسائل: 5 | ياسر: 0 | M: 5

المحادثة الكاملة - 28.09.2025
M
python -m streamlit run app_rows2.py
28.09.2025 16:42
M
Windows sql …
28.09.2025 16:53
M
python -m streamlit run app_rows2.py
28.09.2025 16:56
M
SERVER = r"(localdb)\MSSQLLocalDB"DATABASE = "EasyStoreDBEmpty"ODBC = "ODBC Driver 17 for SQL Server"
28.09.2025 17:02
M
# app_store_sales_company_products_single_multi.pyimport streamlit as stimport pyodbc, pandas as pd, datetime as dtimport plotly.express as px# -----------------------# إعداد الاتصال# -----------------------SERVER = r"(localdb)\MSSQLLocalDB"DATABASE = "EasyStoreDBEmpty"ODBC = "ODBC Driver 17 for SQL Server"def get_conn(): return pyodbc.connect( f"DRIVER={{{ODBC}}};SERVER={SERVER};DATABASE={DATABASE};" "Trusted_Connection=yes;Encrypt=no;".replace("{ODBC}", ODBC) )# -----------------------# أسماء الجداول والأعمدة# -----------------------T_BILLS = "dbo.Bills"T_ITEMS = "dbo.Items"T_TYPES = "dbo.Types"COL_DT = "BillDate"COL_QTY = "Quantity1"COL_PRC = "UnitPrice1"COL_LIN = "TotalPrice1"COL_ITM = "Name"# -----------------------# دوال المساعدة# -----------------------@st.cache_data(ttl=300)def get_db_date_range(): sql = f"SELECT MIN([{COL_DT}]) AS MinDate, MAX([{COL_DT}]) AS MaxDate FROM {T_BILLS};" with get_conn() as cn: df = pd.read_sql(sql, cn) return df.at[0, "MinDate"], df.at[0, "MaxDate"]@st.cache_data(ttl=300)def get_companies_list(): sql = f"SELECT ID, Name FROM {T_TYPES} ORDER BY Name;" with get_conn() as cn: df = pd.read_sql(sql, cn) return df@st.cache_data(ttl=300)def get_items_list(company_id=None): sql = f"SELECT ID, {COL_ITM}, TypeID FROM {T_ITEMS}" params = [] if company_id is not None: sql += " WHERE TypeID = ?" params.append(int(company_id)) sql += f" ORDER BY {COL_ITM};" with get_conn() as cn: df = pd.read_sql(sql, cn, params=params) return df@st.cache_data(ttl=300)def fetch_totals(date_from: str, date_to: str, item: str = None, company: str = None) -> pd.DataFrame: sql = f""" WITH X AS ( SELECT CAST(B.[{COL_DT}] AS date) AS D, DATEPART(HOUR, B.[BillTime]) AS H, I.[{COL_ITM}] AS ItemName, T.[Name] AS CompanyName, COALESCE( CASE WHEN ISNUMERIC(B.[{COL_LIN}]) = 1 THEN CONVERT(float, B.[{COL_LIN}]) END, (CASE WHEN ISNUMERIC(B.[{COL_QTY}]) = 1 THEN CONVERT(float, B.[{COL_QTY}]) END) * (CASE WHEN ISNUMERIC(B.[{COL_PRC}]) = 1 THEN CONVERT(float, B.[{COL_PRC}]) END) ) AS LineAmt FROM {T_BILLS} AS B INNER JOIN {T_ITEMS} AS I ON B.ItemID = I.ID INNER JOIN {T_TYPES} AS T ON I.TypeID = T.ID WHERE B.[{COL_DT}] >= ? AND B.[{COL_DT}] { "AND I." + COL_ITM + " = ?" if item else "" } { "AND T.Name = ?" if company else "" } ) SELECT D, H, ItemName, CompanyName, COALESCE(LineAmt, 0) AS LineAmt FROM X WHERE LineAmt IS NOT NULL """ params = [date_from, date_to] if item: params.append(item) if company: params.append(company) with get_conn() as cn: df = pd.read_sql(sql, cn, params=params) return df# -----------------------# واجهة Streamlit# -----------------------st.set_page_config(layout="wide")st.title("📊 إجمالي مبيعات المحل (رسمة أساسية + رسومات إضافية)")if "charts" not in st.session_state: st.session_state["charts"] = []if "main_chart" not in st.session_state: st.session_state["main_chart"] = None# -----------------------# الفلاتر في الشريط الجانبي# -----------------------with st.sidebar: st.header("⚙️ الفلاتر") db_min, db_max = get_db_date_range() today = dt.date.today() default_from = pd.to_datetime(db_min).date() if pd.notna(db_min) else dt.date(today.year, 1, 1) default_to = pd.to_datetime(db_max).date() if pd.notna(db_max) else today date_from = st.date_input("من تاريخ", default_from) date_to = st.date_input("إلى تاريخ", default_to) if date_from == date_to: unit = st.selectbox("الوحدة الزمنية", ["ساعات", "أيام", "أسابيع", "شهور"]) else: unit = st.selectbox("الوحدة الزمنية", ["أيام", "أسابيع", "شهور"])
28.09.2025 17:41
← العودة إلى الرئيسية