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

7
routes/info/__init__.py Normal file
View 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
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

23
routes/info/pricing.py Normal file
View 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
}