Book in functions

This commit is contained in:
2025-12-16 09:47:26 -05:00
parent d7eefdb652
commit 6209c7acce
8 changed files with 452 additions and 27 deletions

View File

@@ -91,7 +91,8 @@ def upgrade() -> None:
sa.Column('in_from', sa.String(length=64), nullable=False),
sa.Column('status', sa.Enum('BOOKED_IN', 'LANDED', 'CANCELLED', name='arrivalsstatus'), nullable=False, server_default='BOOKED_IN'),
sa.Column('notes', sa.Text(), nullable=True),
sa.Column('booked_in_dt', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=False),
sa.Column('created_dt', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP'), nullable=False),
sa.Column('eta', sa.DateTime(), nullable=True),
sa.Column('landed_dt', sa.DateTime(), nullable=True),
sa.Column('created_by', sa.String(length=16), nullable=True),
sa.Column('updated_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'), nullable=False),
@@ -104,7 +105,8 @@ def upgrade() -> None:
op.create_index('idx_arr_registration', 'arrivals', ['registration'])
op.create_index('idx_arr_in_from', 'arrivals', ['in_from'])
op.create_index('idx_arr_status', 'arrivals', ['status'])
op.create_index('idx_arr_booked_in_dt', 'arrivals', ['booked_in_dt'])
op.create_index('idx_arr_created_dt', 'arrivals', ['created_dt'])
op.create_index('idx_arr_eta', 'arrivals', ['eta'])
op.create_index('idx_arr_created_by', 'arrivals', ['created_by'])

View File

@@ -63,6 +63,28 @@ async def get_public_arrivals(db: Session = Depends(get_db)):
'flight_type': flight.flight_type.value
})
# Add booked-in arrivals
booked_in_arrivals = crud_arrival.get_multi(db, limit=1000)
for arrival in booked_in_arrivals:
# Only include BOOKED_IN and LANDED arrivals
if arrival.status not in (ArrivalStatus.BOOKED_IN, ArrivalStatus.LANDED):
continue
# For BOOKED_IN, only include those from today; for LANDED, include all
if arrival.status == ArrivalStatus.BOOKED_IN:
if not (today_start <= arrival.created_dt < today_end):
continue
arrivals_list.append({
'registration': arrival.registration,
'callsign': arrival.callsign,
'type': arrival.type,
'in_from': arrival.in_from,
'eta': arrival.eta,
'landed_dt': arrival.landed_dt,
'status': arrival.status.value,
'isBookedIn': True
})
return arrivals_list

View File

@@ -25,25 +25,25 @@ class CRUDArrival:
query = query.filter(Arrival.status == status)
if date_from:
query = query.filter(func.date(Arrival.booked_in_dt) >= date_from)
query = query.filter(func.date(Arrival.created_dt) >= date_from)
if date_to:
query = query.filter(func.date(Arrival.booked_in_dt) <= date_to)
query = query.filter(func.date(Arrival.created_dt) <= date_to)
return query.order_by(desc(Arrival.booked_in_dt)).offset(skip).limit(limit).all()
return query.order_by(desc(Arrival.created_dt)).offset(skip).limit(limit).all()
def get_arrivals_today(self, db: Session) -> List[Arrival]:
"""Get today's arrivals (booked in or landed)"""
today = date.today()
return db.query(Arrival).filter(
and_(
func.date(Arrival.booked_in_dt) == today,
func.date(Arrival.created_dt) == today,
or_(
Arrival.status == ArrivalStatus.BOOKED_IN,
Arrival.status == ArrivalStatus.LANDED
)
)
).order_by(Arrival.booked_in_dt).all()
).order_by(Arrival.created_dt).all()
def create(self, db: Session, obj_in: ArrivalCreate, created_by: str) -> Arrival:
db_obj = Arrival(

View File

@@ -23,7 +23,8 @@ class Arrival(Base):
in_from = Column(String(4), nullable=False, index=True)
status = Column(SQLEnum(ArrivalStatus), default=ArrivalStatus.BOOKED_IN, nullable=False, index=True)
notes = Column(Text, nullable=True)
booked_in_dt = Column(DateTime, server_default=func.now(), nullable=False, index=True)
created_dt = Column(DateTime, server_default=func.now(), nullable=False, index=True)
eta = Column(DateTime, nullable=True, index=True)
landed_dt = Column(DateTime, nullable=True)
created_by = Column(String(16), nullable=True, index=True)
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), nullable=False)

View File

@@ -38,7 +38,7 @@ class ArrivalBase(BaseModel):
class ArrivalCreate(ArrivalBase):
pass
eta: Optional[datetime] = None
class ArrivalUpdate(BaseModel):
@@ -57,7 +57,8 @@ class ArrivalStatusUpdate(BaseModel):
class Arrival(ArrivalBase):
id: int
status: ArrivalStatus
booked_in_dt: datetime
created_dt: datetime
eta: Optional[datetime] = None
landed_dt: Optional[datetime] = None
created_by: Optional[str] = None
updated_at: datetime