Cart rendering, bug fixes with cart adding/rming
This commit is contained in:
@@ -10,6 +10,7 @@ from config import PAGE_SIZE
|
||||
from misc.kb import main_menu_kb, render_category
|
||||
from misc.kb.client import (
|
||||
get_back_to_catalogue,
|
||||
render_cart,
|
||||
render_product_interactions,
|
||||
render_products,
|
||||
)
|
||||
@@ -265,6 +266,9 @@ async def add_to_cart(
|
||||
else:
|
||||
show_cart = False
|
||||
quantity = 0
|
||||
await order_service.clear_cart_item(
|
||||
session, customer=cb.from_user.id, product_id=product_id
|
||||
)
|
||||
|
||||
try:
|
||||
await cb.message.edit_reply_markup(
|
||||
@@ -275,6 +279,69 @@ async def add_to_cart(
|
||||
cart_amount=quantity,
|
||||
)
|
||||
)
|
||||
except Exception:
|
||||
await cb.answer("🍃 Корзина уже пуста.")
|
||||
return
|
||||
except Exception as e:
|
||||
await cb.answer("🍃")
|
||||
raise e
|
||||
|
||||
|
||||
@router.callback_query(F.data == "cart")
|
||||
async def cart_init(
|
||||
cb: CallbackQuery,
|
||||
state: FSMContext,
|
||||
session: AsyncSession,
|
||||
order_service: OrderService,
|
||||
):
|
||||
await state.clear()
|
||||
|
||||
cart = await order_service.build_cart_dto(session, customer=cb.from_user.id)
|
||||
|
||||
await cb.message.edit_text(
|
||||
f"total: {cart.total}₽",
|
||||
reply_markup=render_cart(
|
||||
cart.items[:PAGE_SIZE], show_next=len(cart.items) > PAGE_SIZE
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@router.message(Command("cart"))
|
||||
async def cart_cmd(
|
||||
msg: Message,
|
||||
state: FSMContext,
|
||||
session: AsyncSession,
|
||||
order_service: OrderService,
|
||||
):
|
||||
await state.clear()
|
||||
|
||||
cart = await order_service.build_cart_dto(session, customer=msg.from_user.id)
|
||||
|
||||
await msg.answer(
|
||||
f"total: {cart.total}₽",
|
||||
reply_markup=render_cart(
|
||||
cart.items[:PAGE_SIZE], show_next=len(cart.items) > PAGE_SIZE
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@router.callback_query(F.data.startswith("cart:"))
|
||||
async def cart_pagination(
|
||||
cb: CallbackQuery,
|
||||
state: FSMContext,
|
||||
session: AsyncSession,
|
||||
order_service: OrderService,
|
||||
):
|
||||
await state.clear()
|
||||
|
||||
page = int(cb.data.split(":")[1])
|
||||
|
||||
cart = await order_service.build_cart_dto(
|
||||
session, customer=cb.from_user.id, offset=page * PAGE_SIZE
|
||||
)
|
||||
|
||||
await cb.message.edit_reply_markup(
|
||||
reply_markup=render_cart(
|
||||
cart.items[:PAGE_SIZE],
|
||||
page=page,
|
||||
show_next=len(cart.items) > PAGE_SIZE,
|
||||
show_prev=page > 0,
|
||||
),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user