39 lines
1.5 KiB
Python
39 lines
1.5 KiB
Python
from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, Table
|
|
from sqlalchemy.orm import relationship
|
|
from app.db.database import Base
|
|
import datetime
|
|
|
|
# Junction Tables
|
|
project_specialties = Table(
|
|
'project_specialties',
|
|
Base.metadata,
|
|
Column('project_id', Integer, ForeignKey('projects.id'), primary_key=True),
|
|
Column('specialty_id', Integer, ForeignKey('specialties.id'), primary_key=True)
|
|
)
|
|
|
|
project_contractors = Table(
|
|
'project_contractors',
|
|
Base.metadata,
|
|
Column('project_id', Integer, ForeignKey('projects.id'), primary_key=True),
|
|
Column('contractor_id', Integer, ForeignKey('contractors.id'), primary_key=True)
|
|
)
|
|
|
|
class Project(Base):
|
|
__tablename__ = "projects"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
name = Column(String, index=True, nullable=False)
|
|
code = Column(String, unique=True, index=True)
|
|
location = Column(String)
|
|
start_date = Column(DateTime)
|
|
end_date = Column(DateTime)
|
|
status = Column(String, default="active")
|
|
parent_id = Column(Integer, ForeignKey("projects.id"), nullable=True)
|
|
|
|
# Relationships
|
|
parent = relationship("Project", remote_side=[id], back_populates="subprojects")
|
|
subprojects = relationship("Project", back_populates="parent")
|
|
activities = relationship("Activity", back_populates="project")
|
|
specialties = relationship("app.models.specialty.Specialty", secondary=project_specialties)
|
|
contractors = relationship("app.models.contractor.Contractor", secondary=project_contractors)
|