112 lines
3.2 KiB
Python
112 lines
3.2 KiB
Python
from typing import List, Dict, Optional, Union, Any
|
|
from datetime import datetime
|
|
from sqlalchemy.orm import Session
|
|
from models.school import School
|
|
from schemas.school import SchoolCreate, SchoolUpdate
|
|
|
|
def validate_storage_type(storage_type: str) -> bool:
|
|
"""
|
|
Validate if storage type is one of the allowed values.
|
|
|
|
Args:
|
|
storage_type: The storage type to validate
|
|
|
|
Returns:
|
|
bool: True if storage type is valid, False otherwise
|
|
"""
|
|
valid_types = ['Warehouse', 'Cold Storage', 'Secure Vault', 'General Storage']
|
|
return storage_type in valid_types
|
|
|
|
def validate_security_level(security_level: str) -> bool:
|
|
"""
|
|
Validate if security level is one of the allowed values.
|
|
|
|
Args:
|
|
security_level: The security level to validate
|
|
|
|
Returns:
|
|
bool: True if security level is valid, False otherwise
|
|
"""
|
|
valid_levels = ['Low', 'Medium', 'High', 'Maximum']
|
|
return security_level in valid_levels
|
|
|
|
def calculate_available_space(total_space: int, occupied_space: int) -> int:
|
|
"""
|
|
Calculate available storage space.
|
|
|
|
Args:
|
|
total_space: Total square footage
|
|
occupied_space: Currently occupied space
|
|
|
|
Returns:
|
|
int: Available space in square feet
|
|
"""
|
|
available = total_space - occupied_space
|
|
return max(0, available)
|
|
|
|
def check_capacity_limits(current_capacity: int, requested_space: int) -> bool:
|
|
"""
|
|
Check if requested storage space is within capacity limits.
|
|
|
|
Args:
|
|
current_capacity: Current storage capacity
|
|
requested_space: Requested additional space
|
|
|
|
Returns:
|
|
bool: True if space is available, False otherwise
|
|
"""
|
|
return current_capacity >= requested_space
|
|
|
|
def get_available_temperature_controlled_facilities(
|
|
db: Session,
|
|
min_space: int = 0
|
|
) -> List[School]:
|
|
"""
|
|
Get list of available temperature controlled storage facilities.
|
|
|
|
Args:
|
|
db: Database session
|
|
min_space: Minimum space required
|
|
|
|
Returns:
|
|
List of School objects meeting the criteria
|
|
"""
|
|
return db.query(School).filter(
|
|
School.temperature_controlled == True,
|
|
School.is_active == True,
|
|
School.available_space >= min_space
|
|
).all()
|
|
|
|
def update_facility_space(
|
|
db: Session,
|
|
facility_id: int,
|
|
space_change: int
|
|
) -> Union[School, Dict[str, str]]:
|
|
"""
|
|
Update available space for a storage facility.
|
|
|
|
Args:
|
|
db: Database session
|
|
facility_id: ID of the facility to update
|
|
space_change: Change in space (positive for increase, negative for decrease)
|
|
|
|
Returns:
|
|
Updated School object or error dict
|
|
"""
|
|
facility = db.query(School).filter(School.id == facility_id).first()
|
|
if not facility:
|
|
return {"error": "Facility not found"}
|
|
|
|
new_available_space = facility.available_space - space_change
|
|
|
|
if new_available_space < 0:
|
|
return {"error": "Insufficient space available"}
|
|
|
|
if new_available_space > facility.square_footage:
|
|
return {"error": "Cannot exceed total facility space"}
|
|
|
|
facility.available_space = new_available_space
|
|
db.commit()
|
|
db.refresh(facility)
|
|
|
|
return facility |