90 lines
4.5 KiB
Python
90 lines
4.5 KiB
Python
|
|
"""Ajoute sites, données techniques et mouvements quantitatifs.
|
||
|
|
|
||
|
|
Revision ID: c4d8e9f0a1b2
|
||
|
|
Revises: b3c7d8e9f0a1
|
||
|
|
Create Date: 2026-08-14
|
||
|
|
"""
|
||
|
|
from alembic import op
|
||
|
|
import sqlalchemy as sa
|
||
|
|
|
||
|
|
revision = "c4d8e9f0a1b2"
|
||
|
|
down_revision = "b3c7d8e9f0a1"
|
||
|
|
branch_labels = None
|
||
|
|
depends_on = None
|
||
|
|
|
||
|
|
|
||
|
|
def upgrade():
|
||
|
|
op.create_table(
|
||
|
|
"sites",
|
||
|
|
sa.Column("id", sa.Integer(), nullable=False),
|
||
|
|
sa.Column("name", sa.String(length=120), nullable=False),
|
||
|
|
sa.Column("site_type", sa.String(length=40), nullable=False),
|
||
|
|
sa.Column("address", sa.Text(), nullable=True),
|
||
|
|
sa.Column("is_active", sa.Boolean(), nullable=False),
|
||
|
|
sa.Column("created_at", sa.DateTime(), nullable=True),
|
||
|
|
sa.PrimaryKeyConstraint("id"), sa.UniqueConstraint("name"),
|
||
|
|
)
|
||
|
|
op.add_column("buildings", sa.Column("site_id", sa.Integer(), nullable=True))
|
||
|
|
op.create_foreign_key("fk_buildings_site", "buildings", "sites", ["site_id"], ["id"])
|
||
|
|
op.create_index("ix_buildings_site_id", "buildings", ["site_id"])
|
||
|
|
|
||
|
|
equipment_columns = (
|
||
|
|
sa.Column("mobility", sa.String(length=20), nullable=False, server_default="non_precise"),
|
||
|
|
sa.Column("serial_number", sa.String(length=120), nullable=True),
|
||
|
|
sa.Column("manufacturer", sa.String(length=120), nullable=True),
|
||
|
|
sa.Column("model_reference", sa.String(length=120), nullable=True),
|
||
|
|
sa.Column("supplier_id", sa.Integer(), nullable=True),
|
||
|
|
sa.Column("supplier_reference", sa.String(length=120), nullable=True),
|
||
|
|
sa.Column("purchase_price", sa.Numeric(12, 2), nullable=True),
|
||
|
|
sa.Column("purchase_date", sa.Date(), nullable=True),
|
||
|
|
sa.Column("lifecycle_status", sa.String(length=30), nullable=False, server_default="en_service"),
|
||
|
|
sa.Column("unavailable_since", sa.DateTime(), nullable=True),
|
||
|
|
sa.Column("planned_disposal_date", sa.Date(), nullable=True),
|
||
|
|
sa.Column("disposal_date", sa.Date(), nullable=True),
|
||
|
|
sa.Column("disposal_reason", sa.String(length=500), nullable=True),
|
||
|
|
sa.Column("recurrence_monitoring", sa.Boolean(), nullable=False, server_default=sa.false()),
|
||
|
|
)
|
||
|
|
for column in equipment_columns:
|
||
|
|
op.add_column("equipments", column)
|
||
|
|
op.create_foreign_key("fk_equipments_supplier", "equipments", "companies", ["supplier_id"], ["id"])
|
||
|
|
op.create_index("ix_equipments_serial_number", "equipments", ["serial_number"])
|
||
|
|
|
||
|
|
op.create_table(
|
||
|
|
"equipment_quantity_movements",
|
||
|
|
sa.Column("id", sa.BigInteger(), autoincrement=True, nullable=False),
|
||
|
|
sa.Column("root_equipment_id", sa.Integer(), nullable=False),
|
||
|
|
sa.Column("source_equipment_id", sa.Integer(), nullable=True),
|
||
|
|
sa.Column("target_equipment_id", sa.Integer(), nullable=True),
|
||
|
|
sa.Column("source_room_id", sa.Integer(), nullable=True),
|
||
|
|
sa.Column("target_room_id", sa.Integer(), nullable=False),
|
||
|
|
sa.Column("quantity", sa.Integer(), nullable=False),
|
||
|
|
sa.Column("reason", sa.String(length=255), nullable=True),
|
||
|
|
sa.Column("moved_by_id", sa.Integer(), nullable=True),
|
||
|
|
sa.Column("moved_at", sa.DateTime(), nullable=False),
|
||
|
|
sa.ForeignKeyConstraint(["root_equipment_id"], ["equipments.id"]),
|
||
|
|
sa.ForeignKeyConstraint(["source_equipment_id"], ["equipments.id"]),
|
||
|
|
sa.ForeignKeyConstraint(["target_equipment_id"], ["equipments.id"]),
|
||
|
|
sa.ForeignKeyConstraint(["source_room_id"], ["rooms.id"]),
|
||
|
|
sa.ForeignKeyConstraint(["target_room_id"], ["rooms.id"]),
|
||
|
|
sa.ForeignKeyConstraint(["moved_by_id"], ["users.id"], ondelete="SET NULL"),
|
||
|
|
sa.PrimaryKeyConstraint("id"),
|
||
|
|
sa.CheckConstraint("quantity > 0", name="ck_equipment_quantity_movement_positive"),
|
||
|
|
)
|
||
|
|
op.create_index("ix_equipment_quantity_movements_root_equipment_id", "equipment_quantity_movements", ["root_equipment_id"])
|
||
|
|
|
||
|
|
|
||
|
|
def downgrade():
|
||
|
|
op.drop_table("equipment_quantity_movements")
|
||
|
|
op.drop_index("ix_equipments_serial_number", table_name="equipments")
|
||
|
|
op.drop_constraint("fk_equipments_supplier", "equipments", type_="foreignkey")
|
||
|
|
for name in (
|
||
|
|
"recurrence_monitoring", "disposal_reason", "disposal_date", "planned_disposal_date",
|
||
|
|
"unavailable_since", "lifecycle_status", "purchase_date", "purchase_price",
|
||
|
|
"supplier_reference", "supplier_id", "model_reference", "manufacturer", "serial_number", "mobility",
|
||
|
|
):
|
||
|
|
op.drop_column("equipments", name)
|
||
|
|
op.drop_index("ix_buildings_site_id", table_name="buildings")
|
||
|
|
op.drop_constraint("fk_buildings_site", "buildings", type_="foreignkey")
|
||
|
|
op.drop_column("buildings", "site_id")
|
||
|
|
op.drop_table("sites")
|