first commit
This commit is contained in:
7
routes/info/__init__.py
Normal file
7
routes/info/__init__.py
Normal file
@@ -0,0 +1,7 @@
|
||||
from fastapi import APIRouter
|
||||
from .deliveries import router as deliveries_router
|
||||
from .pricing import router as pricing_router
|
||||
|
||||
router = APIRouter()
|
||||
router.include_router(deliveries_router, tags=["info"])
|
||||
router.include_router(pricing_router, prefix="/pricing", tags=["pricing"])
|
||||
77
routes/info/deliveries.py
Normal file
77
routes/info/deliveries.py
Normal 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
|
||||
23
routes/info/pricing.py
Normal file
23
routes/info/pricing.py
Normal file
@@ -0,0 +1,23 @@
|
||||
from fastapi import APIRouter, Depends
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy import select
|
||||
from database import get_db
|
||||
from models import Pricing_Oil_Oil
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@router.get("/current")
|
||||
async def get_current_pricing(db: AsyncSession = Depends(get_db)):
|
||||
# Get the latest pricing record
|
||||
pricing = await db.execute(
|
||||
select(Pricing_Oil_Oil).order_by(Pricing_Oil_Oil.id.desc()).limit(1)
|
||||
)
|
||||
pricing = pricing.scalar_one_or_none()
|
||||
|
||||
if not pricing:
|
||||
return {"price_per_gallon": 0.00, "message": "No pricing available"}
|
||||
|
||||
return {
|
||||
"price_per_gallon": float(pricing.price_for_customer),
|
||||
"date": pricing.date.isoformat() if pricing.date else None
|
||||
}
|
||||
Reference in New Issue
Block a user