Files
marianesaldana 80dbd947e5 Initial commit
2026-05-23 08:59:34 -06:00

70 lines
2.6 KiB
Python

from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey, Enum
from sqlalchemy.orm import relationship
from datetime import datetime
import enum
from ..database import Base
class ReportType(str, enum.Enum):
NO_PASO = "NO_PASO"
RETRASO = "RETRASO"
ACUMULACION = "ACUMULACION"
OTRO = "OTRO"
class ReportStatus(str, enum.Enum):
PENDIENTE = "PENDIENTE"
EN_PROCESO = "EN_PROCESO"
RESUELTO = "RESUELTO"
CERRADO = "CERRADO"
class Report(Base):
__tablename__ = "reports"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
address_id = Column(Integer, ForeignKey("addresses.id"), nullable=False)
folio = Column(String, unique=True, index=True, nullable=False)
report_type = Column(String, nullable=False)
description = Column(Text, nullable=True)
status = Column(String, default=ReportStatus.PENDIENTE)
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
user = relationship("User", back_populates="reports")
address = relationship("Address", back_populates="reports")
class ServiceRating(Base):
__tablename__ = "service_ratings"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
address_id = Column(Integer, ForeignKey("addresses.id"), nullable=False)
rating = Column(Integer, nullable=False) # 1-5
comment = Column(Text, nullable=True)
created_at = Column(DateTime, default=datetime.utcnow)
user = relationship("User", back_populates="ratings")
address = relationship("Address", back_populates="ratings")
class OperationalReport(Base):
"""Reportes generados por el personal operativo (empleados)."""
__tablename__ = "operational_reports"
id = Column(Integer, primary_key=True, index=True)
employee_id = Column(Integer, ForeignKey("users.id"), nullable=False)
folio = Column(String, unique=True, index=True, nullable=False)
category = Column(String, nullable=False)
# NO_ARRANQUE | FALLA_MECANICA | ACCIDENTE | OBSTACULO | TRAFICO |
# COMBUSTIBLE | CLIMA | OTRO
description = Column(Text, nullable=True)
severity = Column(String, default="MEDIA") # BAJA | MEDIA | ALTA
route_id = Column(String, nullable=True) # RUTA-XX (opcional)
truck_id = Column(Integer, nullable=True)
status = Column(String, default="REPORTADO") # REPORTADO | EN_ATENCION | RESUELTO
created_at = Column(DateTime, default=datetime.utcnow)
resolved_at = Column(DateTime, nullable=True)