40 lines
1.6 KiB
Python
40 lines
1.6 KiB
Python
from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, Text, Enum
|
|
from sqlalchemy.orm import relationship
|
|
from app.db.database import Base
|
|
import datetime
|
|
import enum
|
|
|
|
class ActivityType(str, enum.Enum):
|
|
INSPECTION = "inspection"
|
|
MEETING = "meeting"
|
|
VIRTUAL_MEETING = "virtual_meeting"
|
|
COORDINATION = "coordination"
|
|
TEST = "test"
|
|
OTHER = "other"
|
|
|
|
class Activity(Base):
|
|
__tablename__ = "activities"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
project_id = Column(Integer, ForeignKey("projects.id"))
|
|
specialty_id = Column(Integer, ForeignKey("specialties.id"))
|
|
contractor_id = Column(Integer, ForeignKey("contractors.id"), nullable=True)
|
|
user_id = Column(Integer, ForeignKey("users.id")) # Reporter
|
|
|
|
date = Column(DateTime, default=datetime.datetime.utcnow)
|
|
end_date = Column(DateTime, nullable=True)
|
|
type = Column(Enum(ActivityType), default=ActivityType.INSPECTION)
|
|
area = Column(String) # Frente de obra / Linea
|
|
description = Column(Text)
|
|
observations = Column(Text)
|
|
audio_transcription = Column(Text, nullable=True)
|
|
status = Column(String, default="completed")
|
|
|
|
project = relationship("app.models.project.Project", back_populates="activities")
|
|
specialty = relationship("app.models.specialty.Specialty")
|
|
contractor = relationship("app.models.contractor.Contractor")
|
|
reporter = relationship("app.models.user.User")
|
|
|
|
non_conformities = relationship("NonConformity", back_populates="activity")
|
|
evidences = relationship("Evidence", back_populates="activity")
|