gmao/migrations/versions/a4b8c2d6e0f1_link_lifecycle_preventive.py

71 lines
3.7 KiB
Python
Raw Normal View History

"""Relie le cycle de vie des équipements à la maintenance préventive.
Revision ID: a4b8c2d6e0f1
Revises: f1a2b3c4d5e6
"""
from alembic import op
import sqlalchemy as sa
revision = "a4b8c2d6e0f1"
down_revision = "f1a2b3c4d5e6"
branch_labels = None
depends_on = None
def upgrade():
op.add_column("equipment_categories", sa.Column("default_management_mode", sa.String(30), nullable=False, server_default="quantitatif"))
op.add_column("equipments", sa.Column("management_mode", sa.String(30)))
op.add_column("equipment_quantity_movements", sa.Column("movement_type", sa.String(30), nullable=False, server_default="transfert"))
op.add_column("lot_tasks", sa.Column("application_scope", sa.String(20), nullable=False, server_default="auto"))
op.add_column("lot_tasks", sa.Column("unavailable_policy", sa.String(20), nullable=False, server_default="suspend"))
op.add_column("lot_tasks", sa.Column("after_repair_policy", sa.String(20), nullable=False, server_default="preserve"))
op.add_column("lot_tasks", sa.Column("is_safety_critical", sa.Boolean(), nullable=False, server_default=sa.false()))
for name, column in [
("suspension_reason", sa.Column("suspension_reason", sa.String(500))),
("suspended_at", sa.Column("suspended_at", sa.DateTime())),
("room_name_snapshot", sa.Column("room_name_snapshot", sa.String(200))),
("lot_name_snapshot", sa.Column("lot_name_snapshot", sa.String(500))),
("equipment_name_snapshot", sa.Column("equipment_name_snapshot", sa.String(200))),
("lifecycle_status_snapshot", sa.Column("lifecycle_status_snapshot", sa.String(30))),
]:
op.add_column("scheduled_tasks", column)
op.create_table(
"equipment_lifecycle_events",
sa.Column("id", sa.BigInteger(), autoincrement=True, nullable=False),
sa.Column("equipment_id", sa.Integer(), nullable=False),
sa.Column("event_type", sa.String(40), nullable=False),
sa.Column("previous_status", sa.String(30)),
sa.Column("new_status", sa.String(30)),
sa.Column("quantity", sa.Integer(), nullable=False, server_default="1"),
sa.Column("reason", sa.String(500)),
sa.Column("room_id_snapshot", sa.Integer()),
sa.Column("room_name_snapshot", sa.String(200)),
sa.Column("lot_id_snapshot", sa.Integer()),
sa.Column("lot_name_snapshot", sa.String(500)),
sa.Column("intervention_id", sa.Integer()),
sa.Column("created_by_id", sa.Integer()),
sa.Column("created_at", sa.DateTime(), nullable=False),
sa.ForeignKeyConstraint(["equipment_id"], ["equipments.id"], ondelete="CASCADE"),
sa.ForeignKeyConstraint(["intervention_id"], ["interventions.id"], ondelete="SET NULL"),
sa.ForeignKeyConstraint(["created_by_id"], ["users.id"], ondelete="SET NULL"),
sa.PrimaryKeyConstraint("id"),
)
op.create_index("ix_equipment_lifecycle_events_equipment_id", "equipment_lifecycle_events", ["equipment_id"])
op.create_index("ix_equipment_lifecycle_events_event_type", "equipment_lifecycle_events", ["event_type"])
op.create_index("ix_equipment_lifecycle_events_created_at", "equipment_lifecycle_events", ["created_at"])
def downgrade():
op.drop_table("equipment_lifecycle_events")
for name in ("lifecycle_status_snapshot", "equipment_name_snapshot", "lot_name_snapshot", "room_name_snapshot", "suspended_at", "suspension_reason"):
op.drop_column("scheduled_tasks", name)
for name in ("is_safety_critical", "after_repair_policy", "unavailable_policy", "application_scope"):
op.drop_column("lot_tasks", name)
op.drop_column("equipment_quantity_movements", "movement_type")
op.drop_column("equipments", "management_mode")
op.drop_column("equipment_categories", "default_management_mode")