Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -152,22 +152,7 @@ def get_sale_details(sale_id):
|
|
152 |
sale_details = c.fetchall()
|
153 |
return sale_details
|
154 |
|
155 |
-
#
|
156 |
-
def login():
|
157 |
-
st.title('Авторизация')
|
158 |
-
token_input = st.text_input("Введите ваш токен")
|
159 |
-
|
160 |
-
if st.button("Войти"):
|
161 |
-
user_id = get_user_id_by_token(token_input)
|
162 |
-
if user_id:
|
163 |
-
st.session_state.logged_in = True # Устанавливаем состояние авторизации
|
164 |
-
st.session_state.username = token_input
|
165 |
-
st.session_state.user_id = user_id
|
166 |
-
st.success("Добро пожаловать!")
|
167 |
-
else:
|
168 |
-
st.error("Неверный токен!")
|
169 |
-
|
170 |
-
# Страница регистрации
|
171 |
def register():
|
172 |
st.title('Регистрация')
|
173 |
username = st.text_input("Введите ваше имя пользователя")
|
@@ -185,6 +170,20 @@ def register():
|
|
185 |
else:
|
186 |
st.error("Неверный пароль администратора!")
|
187 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
188 |
|
189 |
# Форма добавления товара
|
190 |
def add_product():
|
@@ -235,17 +234,11 @@ def edit_products():
|
|
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,55 +320,84 @@ def add_to_cart():
|
|
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.
|
338 |
-
|
339 |
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
elif page == "Добавить товар":
|
346 |
-
if "logged_in" in st.session_state and st.session_state.logged_in:
|
347 |
add_product()
|
348 |
-
|
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 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
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__ ==
|
381 |
main()
|
|
|
152 |
sale_details = c.fetchall()
|
153 |
return sale_details
|
154 |
|
155 |
+
# Форма регистрации
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
156 |
def register():
|
157 |
st.title('Регистрация')
|
158 |
username = st.text_input("Введите ваше имя пользователя")
|
|
|
170 |
else:
|
171 |
st.error("Неверный пароль администратора!")
|
172 |
|
173 |
+
# Форма авторизации
|
174 |
+
def login():
|
175 |
+
st.title('Авторизация')
|
176 |
+
token_input = st.text_input("Введите ваш токен")
|
177 |
+
|
178 |
+
if st.button("Войти"):
|
179 |
+
user_id = get_user_id_by_token(token_input)
|
180 |
+
if user_id:
|
181 |
+
st.session_state.logged_in = True # Устанавливаем состояние авторизации
|
182 |
+
st.session_state.username = token_input
|
183 |
+
st.session_state.user_id = user_id
|
184 |
+
st.success("Добро пожаловать!")
|
185 |
+
else:
|
186 |
+
st.error("Неверный токен!")
|
187 |
|
188 |
# Форма добавления товара
|
189 |
def add_product():
|
|
|
234 |
conn.commit()
|
235 |
st.success("Товар успешно удален!")
|
236 |
|
237 |
+
# Форма отпуска товара
|
238 |
def add_to_cart():
|
239 |
st.title("Отпуск товара")
|
240 |
+
products = c.execute("SELECT id, name, sale_price, quantity_in_stock FROM products WHERE user_id=?",
|
241 |
+
(st.session_state.user_id,)).fetchall()
|
|
|
|
|
|
|
|
|
|
|
|
|
242 |
|
243 |
if products:
|
244 |
for product in products:
|
|
|
320 |
st.write(f"**Общая сумма сделки:** {total_amount:.2f}")
|
321 |
st.success("Корзина успешно пробита! Все товары добавлены в отчет и корзина очищена.")
|
322 |
|
323 |
+
# Кнопка для отображения сделок
|
324 |
+
if st.button("Сделки"):
|
325 |
+
sales_data = get_all_sales()
|
326 |
+
if sales_data:
|
327 |
+
sale_ids = [sale[0] for sale in sales_data]
|
328 |
+
for sale_id, sale_date, total_amount in sales_data:
|
329 |
+
st.write(f"**Сделка ID:** {sale_id} ({sale_date}) - **Общая сумма:** {total_amount:.2f}")
|
330 |
+
sale_details = get_sale_details(sale_id)
|
331 |
+
if sale_details:
|
332 |
+
df_sales = pd.DataFrame(sale_details, columns=["Название товара", "Количество", "Цена за единицу", "Дата и время"])
|
333 |
+
st.dataframe(df_sales.style.format({"Дата и время": lambda x: pd.to_datetime(x).strftime('%d-%m-%Y %H:%M:%S')}), use_container_width=True)
|
334 |
+
else:
|
335 |
+
st.info("Нет деталей для отображения.")
|
336 |
+
else:
|
337 |
+
st.info("Нет сделок для отображения.")
|
338 |
else:
|
339 |
st.info("Корзина пуста.")
|
340 |
+
|
341 |
+
# Страница отчета о продажах за месяц
|
342 |
+
def monthly_report():
|
343 |
+
st.title("Отчет о продажах за месяц")
|
344 |
+
sales_data, total_sales, total_profit = generate_monthly_report()
|
345 |
+
if sales_data:
|
346 |
+
# Создание DataFrame для отчета
|
347 |
+
df = pd.DataFrame(sales_data, columns=["Название", "Общее количество", "Отпускная цена", "Общие продажи", "Прибыль"])
|
348 |
+
st.write(f"**Отчет за {datetime.now().strftime('%B %Y')}**")
|
349 |
+
st.dataframe(df.style.format({"Отпускная цена": "{:.2f}", "Общие продажи": "{:.2f}", "Прибыль": "{:.2f}"}), use_container_width=True)
|
350 |
+
|
351 |
+
st.write(f"**Общая сумма прода��**: {total_sales:.2f}")
|
352 |
+
st.write(f"**Общая сумма прибыли**: {total_profit:.2f}")
|
353 |
+
|
354 |
+
# Кнопка для отображения сделок
|
355 |
+
if st.button("Сделки"):
|
356 |
+
sales_data = get_all_sales()
|
357 |
+
if sales_data:
|
358 |
+
sale_ids = [sale[0] for sale in sales_data]
|
359 |
+
for sale_id, sale_date, total_amount in sales_data:
|
360 |
+
st.write(f"**Сделка ID:** {sale_id} ({sale_date}) - **Общая сумма:** {total_amount:.2f}")
|
361 |
+
sale_details = get_sale_details(sale_id)
|
362 |
+
if sale_details:
|
363 |
+
df_sales = pd.DataFrame(sale_details, columns=["Название товара", "Количество", "Цена за единицу", "Дата и время"])
|
364 |
+
st.dataframe(df_sales.style.format({"Дата и время": lambda x: pd.to_datetime(x).strftime('%d-%m-%Y %H:%M:%S')}), use_container_width=True)
|
365 |
+
else:
|
366 |
+
st.info("Нет деталей для отображения.")
|
367 |
+
else:
|
368 |
+
st.info("Нет сделок для отображения.")
|
369 |
else:
|
370 |
+
st.info("Нет данных о продажах за этот месяц.")
|
371 |
|
372 |
+
# Главная функция приложения
|
373 |
def main():
|
374 |
+
if 'logged_in' not in st.session_state:
|
375 |
+
st.session_state.logged_in = False
|
376 |
|
377 |
+
if st.session_state.logged_in:
|
378 |
+
st.sidebar.title(f"Привет, {st.session_state.username}!")
|
379 |
+
option = st.sidebar.selectbox("Выберите действие", ["Добавить товар", "Отпуск товара", "Редактировать товары", "Отчет за месяц", "Выйти"])
|
380 |
+
|
381 |
+
if option == "Добавить товар":
|
|
|
|
|
382 |
add_product()
|
383 |
+
elif option == "Отпуск товара":
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
384 |
add_to_cart()
|
385 |
+
elif option == "Редактировать товары":
|
386 |
+
edit_products()
|
387 |
+
elif option == "Отчет за месяц":
|
388 |
+
monthly_report()
|
389 |
+
elif option == "Выйти":
|
390 |
+
st.session_state.logged_in = False
|
391 |
+
st.session_state.username = None
|
392 |
+
st.session_state.user_id = None
|
393 |
+
st.success("Вы вышли из системы!")
|
394 |
+
else:
|
395 |
+
# Показ только страницы авторизации на главной странице
|
396 |
+
login()
|
397 |
+
|
398 |
+
# Добавляем ссылку на регистрацию в сайдбар
|
399 |
+
if st.sidebar.button("Регистрация"):
|
400 |
+
register()
|
|
|
|
|
|
|
|
|
|
|
401 |
|
402 |
+
if __name__ == "__main__":
|
403 |
main()
|