Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -185,6 +185,7 @@ def register():
|
|
185 |
else:
|
186 |
st.error("Неверный пароль администратора!")
|
187 |
|
|
|
188 |
# Форма добавления товара
|
189 |
def add_product():
|
190 |
st.title("Добавление товара")
|
@@ -234,22 +235,17 @@ def edit_products():
|
|
234 |
conn.commit()
|
235 |
st.success("Товар успешно удален!")
|
236 |
|
237 |
-
|
238 |
-
st.info("Нет доступных товаров для редактирования или удаления.")
|
239 |
-
|
240 |
-
# Форма отпуска товара с поиском
|
241 |
def add_to_cart():
|
242 |
st.title("Отпуск товара")
|
243 |
|
244 |
-
|
|
|
245 |
|
246 |
-
# Получаем
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
# Фильтруем товары по поисковому запросу
|
251 |
-
if search_query:
|
252 |
-
products = [p for p in products if search_query in p[1].lower()]
|
253 |
|
254 |
if products:
|
255 |
for product in products:
|
@@ -331,57 +327,55 @@ def add_to_cart():
|
|
331 |
st.write(f"**Общая сумма сделки:** {total_amount:.2f}")
|
332 |
st.success("Корзина успешно пробита! Все товары добавлены в отчет и корзина очищена.")
|
333 |
|
334 |
-
# Кнопка для отображения сделок
|
335 |
-
if st.button("Сделки"):
|
336 |
-
sales_data = get_all_sales()
|
337 |
-
if sales_data:
|
338 |
-
sale_ids = [sale[0] for sale in sales_data]
|
339 |
-
for sale_id, sale_date, total_amount in sales_data:
|
340 |
-
st.write(f"**Сделка ID:** {sale_id} ({sale_date}) - **Общая сумма:** {total_amount:.2f}")
|
341 |
-
sale_details = get_sale_details(sale_id)
|
342 |
-
if sale_details:
|
343 |
-
df_sales = pd.DataFrame(sale_details, columns=["Название товара", "Количество", "Цена за единицу", "Дата и время"])
|
344 |
-
st.dataframe(df_sales.style.format({"Дата и время": lambda x: pd.to_datetime(x).strftime('%d-%m-%Y %H:%M:%S')}), use_container_width=True)
|
345 |
-
else:
|
346 |
-
st.info("Нет деталей для отображения.")
|
347 |
-
else:
|
348 |
-
st.info("Нет сделок для отображения.")
|
349 |
else:
|
350 |
st.info("Корзина пуста.")
|
|
|
|
|
351 |
|
352 |
-
# Главная функция
|
353 |
def main():
|
354 |
-
st.sidebar.title("
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
if "
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
elif choice == "Регистрация":
|
365 |
-
register()
|
366 |
-
else:
|
367 |
-
st.sidebar.write(f"Пользователь: {st.session_state.username}")
|
368 |
-
|
369 |
-
if choice == "Добавить товар":
|
370 |
add_product()
|
371 |
-
|
372 |
-
|
373 |
-
|
|
|
374 |
edit_products()
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
384 |
|
385 |
-
# Запуск приложения
|
386 |
if __name__ == '__main__':
|
387 |
main()
|
|
|
185 |
else:
|
186 |
st.error("Неверный пароль администратора!")
|
187 |
|
188 |
+
|
189 |
# Форма добавления товара
|
190 |
def add_product():
|
191 |
st.title("Добавление товара")
|
|
|
235 |
conn.commit()
|
236 |
st.success("Товар успешно удален!")
|
237 |
|
238 |
+
# Функция для отпуска товара с поиском
|
|
|
|
|
|
|
239 |
def add_to_cart():
|
240 |
st.title("Отпуск товара")
|
241 |
|
242 |
+
# Поисковая строка
|
243 |
+
search_query = st.text_input("Поиск товара", "")
|
244 |
|
245 |
+
# Получаем товары, которые принадлежат пользователю
|
246 |
+
c.execute("SELECT id, name, sale_price, quantity_in_stock FROM products WHERE user_id=? AND name LIKE ?",
|
247 |
+
(st.session_state.user_id, f'%{search_query}%'))
|
248 |
+
products = c.fetchall()
|
|
|
|
|
|
|
249 |
|
250 |
if products:
|
251 |
for product in products:
|
|
|
327 |
st.write(f"**Общая сумма сделки:** {total_amount:.2f}")
|
328 |
st.success("Корзина успешно пробита! Все товары добавлены в отчет и корзина очищена.")
|
329 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
330 |
else:
|
331 |
st.info("Корзина пуста.")
|
332 |
+
else:
|
333 |
+
st.info("Нет товаров, соответствующих вашему запросу.")
|
334 |
|
335 |
+
# Главная функция
|
336 |
def main():
|
337 |
+
st.sidebar.title("Навигация")
|
338 |
+
page = st.sidebar.selectbox("Выберите страницу", ["Авторизация", "Регистрация", "Добавить товар", "Редактировать товар", "Отпуск товара", "Отчеты"])
|
339 |
+
|
340 |
+
# Обрабатываем страницы
|
341 |
+
if page == "Авторизация":
|
342 |
+
login()
|
343 |
+
elif page == "Регистрация":
|
344 |
+
register()
|
345 |
+
elif page == "Добавить товар":
|
346 |
+
if "logged_in" in st.session_state and st.session_state.logged_in:
|
|
|
|
|
|
|
|
|
|
|
|
|
347 |
add_product()
|
348 |
+
else:
|
349 |
+
st.error("Пожалуйста, войдите в систему.")
|
350 |
+
elif page == "Редактировать товар":
|
351 |
+
if "logged_in" in st.session_state and st.session_state.logged_in:
|
352 |
edit_products()
|
353 |
+
else:
|
354 |
+
st.error("Пожалуйста, войдите в систему.")
|
355 |
+
elif page == "Отпуск товара":
|
356 |
+
if "logged_in" in st.session_state and st.session_state.logged_in:
|
357 |
+
add_to_cart()
|
358 |
+
else:
|
359 |
+
st.error("Пожалуйста, войдите в систему.")
|
360 |
+
elif page == "Отчеты":
|
361 |
+
if "logged_in" in st.session_state and st.session_state.logged_in:
|
362 |
+
st.title("Отчеты")
|
363 |
+
if st.button("Показать все продажи"):
|
364 |
+
all_sales = get_all_sales()
|
365 |
+
if all_sales:
|
366 |
+
sales_df = pd.DataFrame(all_sales, columns=["ID продажи", "Дата продажи", "Сумма сделки"])
|
367 |
+
st.dataframe(sales_df.style.format({"Сумма сделки": "{:.2f}", "Дата продажи": lambda x: pd.to_datetime(x).strftime('%d-%m-%Y %H:%M:%S')}), use_container_width=True)
|
368 |
+
else:
|
369 |
+
st.info("Нет продаж.")
|
370 |
+
if st.button("Создать месячный отчет"):
|
371 |
+
sales_data, total_sales, total_profit = generate_monthly_report()
|
372 |
+
if sales_data:
|
373 |
+
report_df = pd.DataFrame(sales_data, columns=["Название товара", "Общее количество", "Цена за единицу", "Общая сумма продаж", "Прибыль"])
|
374 |
+
st.dataframe(report_df.style.format({"Цена за единицу": "{:.2f}", "Общая сумма продаж": "{:.2f}", "Прибыль": "{:.2f}"}), use_container_width=True)
|
375 |
+
st.write(f"**Общая сумма продаж:** {total_sales:.2f}")
|
376 |
+
st.write(f"**Общая прибыль:** {total_profit:.2f}")
|
377 |
+
else:
|
378 |
+
st.info("Нет данных для отчета.")
|
379 |
|
|
|
380 |
if __name__ == '__main__':
|
381 |
main()
|