Aleksmorshen commited on
Commit
aac75f1
·
verified ·
1 Parent(s): d84f37d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +155 -117
app.py CHANGED
@@ -223,142 +223,180 @@ def edit_products():
223
  if st.button("Сохранить изменения"):
224
  c.execute('''
225
  UPDATE products
226
- SET name=?, description=?, purchase_price=?, sale_price=?, quantity_in_stock=?
227
- WHERE id=?
228
  ''', (new_name, new_description, new_purchase_price, new_sale_price, new_quantity_in_stock, product[0]))
229
  conn.commit()
230
- st.success("Изменения сохранены!")
231
 
232
  if st.button("Удалить товар"):
233
- c.execute('DELETE FROM products WHERE id=?', (product[0],))
234
  conn.commit()
235
- st.success("Товар удален!")
236
- else:
237
- st.write("Нет товаров для редактирования.")
238
 
239
- # Форма для добавления товаров в корзину
240
  def add_to_cart():
241
- st.title("Добавление товара в корзину")
242
- products = c.execute("SELECT id, name, sale_price FROM products WHERE user_id=?", (st.session_state.user_id,)).fetchall()
243
-
 
244
  if products:
245
- product_names = [p[1] for p in products]
246
- product_name = st.selectbox("Выберите товар", product_names)
247
- quantity = st.number_input("Количество", min_value=1, step=1)
248
-
249
- if st.button("Добавить в корзину"):
250
- product = next(p for p in products if p[1] == product_name)
251
- c.execute("INSERT OR REPLACE INTO cart (product_id, quantity) VALUES (?, ?)", (product[0], quantity))
252
- conn.commit()
253
- st.success("Товар добавлен в корзину!")
254
- else:
255
- st.write("Нет товаров для добавления в корзину.")
256
-
257
- # Форма для оформления продажи
258
- def checkout():
259
- st.title("Оформление продажи")
260
- if st.button("Оформить"):
261
- sales_details, sale_id, total_amount = record_sales()
262
- st.write("Продажа оформлена!")
263
- st.write(f"Идентификатор продажи: {sale_id}")
264
- st.write(f"Общая сумма: {total_amount:.2f}")
265
- st.write("Подробности продажи:")
266
- for detail in sales_details:
267
- st.write(f"Товар: {detail[0]}, Количество: {detail[1]}, Сумма: {detail[2]:.2f}, Дата: {detail[3]}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
268
 
269
- # Форма для генерации отчета за месяц
270
  def monthly_report():
271
- st.title("Ежемесячный отчет")
272
  sales_data, total_sales, total_profit = generate_monthly_report()
273
- st.write(f"Общая сумма продаж: {total_sales:.2f}")
274
- st.write(f"Общая прибыль: {total_profit:.2f}")
275
- st.write("Детали продаж:")
276
- for data in sales_data:
277
- st.write(f"Товар: {data[0]}, Количество: {data[1]}, Сумма продаж: {data[2]:.2f}, Прибыль: {data[4]:.2f}")
278
-
279
- # Форма для просмотра всех сделок
280
- def view_sales():
281
- st.title("Просмотр всех сделок")
282
- sales_data = get_all_sales()
283
- for sale in sales_data:
284
- st.write(f"Продажа ID: {sale[0]}, Дата: {sale[1]}, Сумма: {sale[2]:.2f}")
285
-
286
- # Форма для просмотра подробностей сделки
287
- def view_sale_details():
288
- st.title("Детали сделки")
289
- sale_id = st.text_input("Введите ID сделки")
290
-
291
- if st.button("Показать детали"):
292
- sale_details = get_sale_details(sale_id)
293
- if sale_details:
294
- st.write(f"Детали сделки ID: {sale_id}")
295
- for detail in sale_details:
296
- st.write(f"Товар: {detail[0]}, Количество: {detail[1]}, Цена: {detail[2]:.2f}, Дата: {detail[3]}")
297
- else:
298
- st.error("Сделка не найдена.")
299
 
300
- # Основной блок
301
  def main():
302
- st.sidebar.title("Меню")
303
- options = ["Авторизация", "Регистрация", "Добавление товара", "Редактирование товара", "Добавление в корзину", "Оформление продажи", "Ежемесячный отчет", "Просмотр всех сделок", "Детали сделки"]
304
- page = st.sidebar.radio("Выберите страницу", options)
305
-
306
- if "logged_in" not in st.session_state:
307
  st.session_state.logged_in = False
308
 
309
- if page == "Авторизация":
310
- if not st.session_state.logged_in:
311
- login()
312
- else:
313
- st.sidebar.write(f"Вы уже авторизованы как {st.session_state.username}")
314
-
315
- elif page == "Регистрация":
316
- if not st.session_state.logged_in:
317
- register()
318
- else:
319
- st.sidebar.write(f"Вы уже авторизованы как {st.session_state.username}")
320
 
321
- elif page == "Добавление товара":
322
- if st.session_state.logged_in:
323
  add_product()
324
- else:
325
- st.error("Пожалуйста, авторизуйтесь для добавления товара.")
326
-
327
- elif page == "Редактирование товара":
328
- if st.session_state.logged_in:
329
- edit_products()
330
- else:
331
- st.error("Пожалуйста, авторизуйтесь для редактирования товара.")
332
-
333
- elif page == "Добавление в корзину":
334
- if st.session_state.logged_in:
335
  add_to_cart()
336
- else:
337
- st.error("Пожалуйста, авторизуйтесь для добавления товара в корзину.")
338
-
339
- elif page == "Оформление продажи":
340
- if st.session_state.logged_in:
341
- checkout()
342
- else:
343
- st.error("Пожалуйста, авторизуйтесь для оформления продажи.")
344
-
345
- elif page == "Ежемесячный отчет":
346
- if st.session_state.logged_in:
347
  monthly_report()
348
- else:
349
- st.error("Пожалуйста, авторизуйтесь для просмотра отчета.")
350
-
351
- elif page == "Просмотр всех сделок":
352
- if st.session_state.logged_in:
353
- view_sales()
354
- else:
355
- st.error("Пожалуйста, авторизуйтесь для просмотра сделок.")
356
-
357
- elif page == "Детали сделки":
358
- if st.session_state.logged_in:
359
- view_sale_details()
360
- else:
361
- st.error("Пожалуйста, авторизуйтесь для просмотра деталей сделки.")
362
 
363
  if __name__ == "__main__":
364
  main()
 
223
  if st.button("Сохранить изменения"):
224
  c.execute('''
225
  UPDATE products
226
+ SET name = ?, description = ?, purchase_price = ?, sale_price = ?, quantity_in_stock = ?
227
+ WHERE id = ?
228
  ''', (new_name, new_description, new_purchase_price, new_sale_price, new_quantity_in_stock, product[0]))
229
  conn.commit()
230
+ st.success("Товар успешно обновлен!")
231
 
232
  if st.button("Удалить товар"):
233
+ c.execute("DELETE FROM products WHERE id=?", (product[0],))
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:
245
+ cols = st.columns(4)
246
+ with cols[0]:
247
+ st.write(product[1]) # Название товара
248
+
249
+ with cols[1]:
250
+ quantity = st.number_input(f"Количество для '{product[1]}'", min_value=1, max_value=product[3], key=f"quantity_{product[0]}")
251
+
252
+ with cols[2]:
253
+ add_button = st.button(f"Добавить в корзину", key=f"add_{product[0]}")
254
+
255
+ if add_button:
256
+ if quantity <= product[3]:
257
+ # Обработка добавления товара в корзину
258
+ c.execute('''
259
+ INSERT INTO cart (product_id, quantity)
260
+ VALUES (?, ?)
261
+ ON CONFLICT(product_id)
262
+ DO UPDATE SET quantity = quantity + excluded.quantity
263
+ ''', (product[0], quantity))
264
+
265
+ # Уменьшаем количество на складе
266
+ c.execute("UPDATE products SET quantity_in_stock = quantity_in_stock - ? WHERE id=?",
267
+ (quantity, product[0]))
268
+ conn.commit()
269
+ st.success(f"Товар '{product[1]}' успешно добавлен в корзину!")
270
+ else:
271
+ st.error(f"Недостаточное количество товара '{product[1]}' на складе!")
272
+
273
+ with cols[3]:
274
+ remove_button = st.button(f"Удалить из корзины", key=f"remove_{product[0]}")
275
+
276
+ if remove_button:
277
+ if quantity > 0:
278
+ # Обработка удаления товара из корзины
279
+ current_quantity = c.execute("SELECT quantity FROM cart WHERE product_id=?", (product[0],)).fetchone()
280
+ if current_quantity:
281
+ new_quantity = current_quantity[0] - quantity
282
+ if new_quantity > 0:
283
+ c.execute('''
284
+ INSERT INTO cart (product_id, quantity)
285
+ VALUES (?, ?)
286
+ ON CONFLICT(product_id)
287
+ DO UPDATE SET quantity = excluded.quantity
288
+ ''', (product[0], new_quantity))
289
+ else:
290
+ c.execute("DELETE FROM cart WHERE product_id=?", (product[0],))
291
+
292
+ # Увеличиваем количество на складе
293
+ c.execute("UPDATE products SET quantity_in_stock = quantity_in_stock + ? WHERE id=?",
294
+ (quantity, product[0]))
295
+ conn.commit()
296
+ st.success(f"Товар '{product[1]}' успешно удалён из корзины!")
297
+ else:
298
+ st.error(f"Товар '{product[1]}' не найден в корзине.")
299
+ else:
300
+ st.error(f"Введите количество для удаления товара '{product[1]}'.")
301
+
302
+ # Отображение состояния корзины
303
+ st.subheader("Состояние корзины")
304
+ items, total_quantity, total_price = get_cart_summary(st.session_state.user_id)
305
+
306
+ if items:
307
+ # Создание DataFrame для таблицы
308
+ df = pd.DataFrame(items, columns=["Название", "Количество", "Цена за единицу", "Итого"])
309
+ st.dataframe(df.style.format({"Цена за единицу": "{:.2f}", "Итого": "{:.2f}"}), use_container_width=True)
310
+
311
+ st.write(f"Общее количество: {total_quantity}, Общая стоимость: {total_price:.2f}")
312
+
313
+ # Добавляем кнопку "Пробить" для оформления продажи
314
+ if st.button("Пробить"):
315
+ sales_details, sale_id, total_amount = record_sales()
316
+ if sales_details:
317
+ st.write("**Детали сделок:**")
318
+ sale_details_df = pd.DataFrame(sales_details, columns=["ID товара", "Количество", "Сумма", "Дата и время"])
319
+ st.dataframe(sale_details_df.style.format({"Сумма": "{:.2f}", "Дата и время": lambda x: pd.to_datetime(x).strftime('%d-%m-%Y %H:%M:%S')}), use_container_width=True)
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
+ page = st.sidebar.selectbox("Выберите страницу", ["Регистрация", "Авторизация"])
396
+ if page == "Регистрация":
397
+ register()
398
+ elif page == "Авторизация":
399
+ login()
 
 
 
400
 
401
  if __name__ == "__main__":
402
  main()