Fred808 commited on
Commit
4f391a1
·
verified ·
1 Parent(s): 3e3931e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +66 -63
app.py CHANGED
@@ -567,73 +567,76 @@ async def process_order_flow(user_id: str, message: str) -> str:
567
  return summary
568
 
569
  if state.step == 7:
570
- if message.lower() in ["yes", "y"]:
571
- order_id = f"ORD-{int(time.time())}"
572
- state.data["order_id"] = order_id
573
- price_per_serving = 1500
574
- quantity = state.data.get("quantity", 1)
575
- shipping_cost = state.data.get("shipping_cost", 0)
576
- total_price = (quantity * price_per_serving) + shipping_cost
577
- state.data["price"] = str(total_price)
578
-
579
- async def save_order():
580
- async with async_session() as session:
581
- order = Order(
582
- order_id=order_id,
583
- user_id=user_id,
584
- dish=state.data["dish"],
585
- quantity=str(quantity),
586
- price=str(total_price),
587
- status="Pending Payment",
588
- delivery_address=state.data.get("address", "")
589
- )
590
- session.add(order)
591
- await session.commit()
592
- asyncio.create_task(save_order())
593
- asyncio.create_task(log_order_tracking(order_id, "Order Placed", "Order placed and awaiting payment."))
594
 
595
- async def notify_management_order(order_details: dict):
596
- message_body = (
597
- f"New Order Received:\n"
598
- f"Order ID: {order_details['order_id']}\n"
599
- f"Dish: {order_details['dish']}\n"
600
- f"Quantity: {order_details['quantity']}\n"
601
- f"Total Price: {order_details['price']}\n"
602
- f"Phone: {state.data.get('phone_number', '')}\n"
603
- f"Delivery Address: {order_details.get('address', 'Not Provided')}\n"
604
- f"Extras: {state.data.get('extras', 'None')}\n"
605
- f"Status: Pending Payment"
606
  )
607
- await asyncio.to_thread(send_whatsapp_message, MANAGEMENT_WHATSAPP_NUMBER, message_body)
608
- order_details = {
609
- "order_id": order_id,
610
- "dish": state.data["dish"],
611
- "quantity": state.data["quantity"],
612
- "price": state.data["price"],
613
- "address": state.data.get("address", "")
614
- }
615
- asyncio.create_task(notify_management_order(order_details))
616
 
617
- email = "customer@example.com"
618
- payment_data = create_paystack_payment_link(email, total_price * 100, order_id)
619
- dish_name = state.data.get("dish", "")
620
- state.reset()
621
- if user_id in user_state:
622
- del user_state[user_id]
623
- if payment_data.get("status"):
624
- payment_link = payment_data["data"]["authorization_url"]
625
- return (f"Thank you for your order of {quantity} serving(s) of {dish_name}! "
626
- f"Your Order ID is {order_id}.\nPlease complete payment here: {payment_link}\n"
627
- "You can track your order status using your Order ID.\n"
628
- "Is there anything else you'd like to order?")
629
- else:
630
- return (f"Your order has been placed with Order ID {order_id}, "
631
- "but we could not initialize payment. Please try again later.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
632
  else:
633
- state.reset()
634
- if user_id in user_state:
635
- del user_state[user_id]
636
- return "Order canceled. Let me know if you'd like to try again."
 
 
 
637
  return ""
638
 
639
 
 
567
  return summary
568
 
569
  if state.step == 7:
570
+ if message.lower() in ["yes", "y"]:
571
+ order_id = f"ORD-{int(time.time())}"
572
+ state.data["order_id"] = order_id
573
+ price_per_serving = 1500
574
+ quantity = state.data.get("quantity", 1)
575
+ total_price = quantity * price_per_serving # Removed shipping cost
576
+ state.data["price"] = str(total_price)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
577
 
578
+ async def save_order():
579
+ async with async_session() as session:
580
+ order = Order(
581
+ order_id=order_id,
582
+ user_id=user_id,
583
+ dish=state.data["dish"],
584
+ quantity=str(quantity),
585
+ price=str(total_price),
586
+ status="Pending Payment",
587
+ delivery_address=state.data.get("address", "")
 
588
  )
589
+ session.add(order)
590
+ await session.commit()
 
 
 
 
 
 
 
591
 
592
+ # Await the save_order task to ensure the order is committed before proceeding.
593
+ await save_order()
594
+
595
+ asyncio.create_task(log_order_tracking(order_id, "Order Placed", "Order placed and awaiting payment."))
596
+
597
+ async def notify_management_order(order_details: dict):
598
+ message_body = (
599
+ f"New Order Received:\n"
600
+ f"Order ID: {order_details['order_id']}\n"
601
+ f"Dish: {order_details['dish']}\n"
602
+ f"Quantity: {order_details['quantity']}\n"
603
+ f"Total Price: {order_details['price']}\n"
604
+ f"Phone: {state.data.get('phone_number', '')}\n"
605
+ f"Delivery Address: {order_details.get('address', 'Not Provided')}\n"
606
+ f"Extras: {state.data.get('extras', 'None')}\n"
607
+ f"Status: Pending Payment"
608
+ )
609
+ await asyncio.to_thread(send_whatsapp_message, MANAGEMENT_WHATSAPP_NUMBER, message_body)
610
+
611
+ order_details = {
612
+ "order_id": order_id,
613
+ "dish": state.data["dish"],
614
+ "quantity": state.data["quantity"],
615
+ "price": state.data["price"],
616
+ "address": state.data.get("address", "")
617
+ }
618
+ asyncio.create_task(notify_management_order(order_details))
619
+
620
+ email = "customer@example.com"
621
+ payment_data = create_paystack_payment_link(email, total_price * 100, order_id)
622
+ dish_name = state.data.get("dish", "")
623
+ state.reset()
624
+ if user_id in user_state:
625
+ del user_state[user_id]
626
+ if payment_data.get("status"):
627
+ payment_link = payment_data["data"]["authorization_url"]
628
+ return (f"Thank you for your order of {quantity} serving(s) of {dish_name}! "
629
+ f"Your Order ID is {order_id}.\nPlease complete payment here: {payment_link}\n"
630
+ "You can track your order status using your Order ID.\n"
631
+ "Is there anything else you'd like to order?")
632
  else:
633
+ return (f"Your order has been placed with Order ID {order_id}, "
634
+ "but we could not initialize payment. Please try again later.")
635
+ else:
636
+ state.reset()
637
+ if user_id in user_state:
638
+ del user_state[user_id]
639
+ return "Order canceled. Let me know if you'd like to try again."
640
  return ""
641
 
642