first commit

This commit is contained in:
2026-01-17 15:21:41 -05:00
commit b93d41c1ae
36 changed files with 3391 additions and 0 deletions

77
routes/info/deliveries.py Normal file
View File

@@ -0,0 +1,77 @@
from fastapi import Depends, HTTPException, APIRouter
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select, desc, func
from database import get_db
from models import Delivery_Delivery, Customer_Customer
from routes.auth.current_user import get_current_user
from models import Account_User
router = APIRouter()
STATUS_MAPPING = {
0: "Waiting",
1: "Cancelled",
2: "Today",
3: "Tomorrow_Delivery",
4: "Partial_Delivery",
5: "Issue_Delivery",
9: "Pending",
10: "Finalized"
}
PAYMENT_MAPPING = {
0: "Cash",
1: "Credit",
2: "Credit/Cash",
3: "Check",
4: "Other"
}
@router.get("/deliveries")
async def get_user_deliveries(
current_user: Account_User = Depends(get_current_user),
db: AsyncSession = Depends(get_db)
):
if not current_user.user_id:
raise HTTPException(status_code=404, detail="Customer not found")
# Get customer from user_id
customer = await db.execute(
select(Customer_Customer).where(Customer_Customer.id == current_user.user_id)
)
customer = customer.scalar_one_or_none()
if not customer:
raise HTTPException(status_code=404, detail="Customer not found")
# Get last 20 deliveries ordered by delivery date (when_delivered or when_ordered) desc
deliveries_query = await db.execute(
select(Delivery_Delivery)
.where(Delivery_Delivery.customer_id == customer.id)
.order_by(desc(func.coalesce(Delivery_Delivery.when_delivered, Delivery_Delivery.when_ordered)))
.limit(20)
)
deliveries = deliveries_query.scalars().all()
# Format deliveries
result = []
for delivery in deliveries:
# Use when_delivered if available, otherwise when_ordered
delivery_date = delivery.when_delivered or delivery.when_ordered
# Use gallons_delivered if available, otherwise gallons_ordered
gallons = delivery.gallons_delivered if delivery.gallons_delivered is not None else delivery.gallons_ordered
result.append({
"id": delivery.id,
"when_ordered": delivery.when_ordered.isoformat() if delivery.when_ordered else None,
"when_delivered": delivery.when_delivered.isoformat() if delivery.when_delivered else None,
"delivery_date": delivery_date.isoformat() if delivery_date else None,
"gallons_ordered": delivery.gallons_ordered,
"gallons_delivered": float(delivery.gallons_delivered) if delivery.gallons_delivered else None,
"gallons": float(gallons) if gallons is not None else None,
"customer_price": float(delivery.customer_price) if delivery.customer_price else None,
"delivery_status": STATUS_MAPPING.get(delivery.delivery_status, f"Unknown ({delivery.delivery_status})"),
"payment_type": PAYMENT_MAPPING.get(delivery.payment_type, f"Unknown ({delivery.payment_type})"),
"dispatcher_notes": delivery.dispatcher_notes
})
return result