"""sprint2_build_order_tables

Revision ID: b57b3d22749b
Revises: e429c1001e80
Create Date: 2026-07-10 14:50:40.231956

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision: str = 'b57b3d22749b'
down_revision: Union[str, None] = 'e429c1001e80'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table('sales_activity_log',
    sa.Column('log_id', sa.UUID(), nullable=False),
    sa.Column('entity_type', sa.String(length=50), nullable=False),
    sa.Column('entity_id', sa.UUID(), nullable=False),
    sa.Column('activity_type', sa.String(length=50), nullable=False),
    sa.Column('old_value', sa.String(length=255), nullable=True),
    sa.Column('new_value', sa.String(length=255), nullable=True),
    sa.Column('remarks', sa.Text(), nullable=True),
    sa.Column('performed_by', sa.UUID(), nullable=True),
    sa.Column('created_at', sa.DateTime(), nullable=True),
    sa.PrimaryKeyConstraint('log_id')
    )
    op.create_table('build_order',
    sa.Column('order_id', sa.UUID(), nullable=False),
    sa.Column('order_number', sa.String(length=50), nullable=True),
    sa.Column('quote_id', sa.UUID(), nullable=True),
    sa.Column('customer_id', sa.String(length=50), nullable=False),
    sa.Column('chassis_no', sa.String(length=100), nullable=True),
    sa.Column('chassis_model', sa.String(length=50), nullable=True),
    sa.Column('body_type', sa.String(length=50), nullable=True),
    sa.Column('bus_use', sa.String(length=20), nullable=True),
    sa.Column('status', sa.String(length=50), nullable=False),
    sa.Column('pre_production_status', sa.String(length=50), nullable=False),
    sa.Column('da_lite_status', sa.String(length=20), nullable=False),
    sa.Column('chassis_receive_date', sa.Date(), nullable=True),
    sa.Column('induction_date', sa.Date(), nullable=True),
    sa.Column('dispatch_date', sa.Date(), nullable=True),
    sa.Column('contractor_group', sa.String(length=10), nullable=True),
    sa.Column('ac_communication', sa.Text(), nullable=True),
    sa.Column('driver_request_notes', sa.Text(), nullable=True),
    sa.Column('seat_fitting_notes', sa.Text(), nullable=True),
    sa.Column('document_pending', sa.Text(), nullable=True),
    sa.Column('pdi_inspector', sa.String(length=100), nullable=True),
    sa.Column('yard_location', sa.String(length=100), nullable=True),
    sa.Column('assigned_to_name', sa.String(length=100), nullable=True),
    sa.Column('remarks', sa.Text(), nullable=True),
    sa.Column('base_price', sa.Float(), nullable=True),
    sa.Column('total_amount', sa.Float(), nullable=True),
    sa.Column('balance_due', sa.Float(), nullable=True),
    sa.Column('created_at', sa.DateTime(), nullable=True),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.ForeignKeyConstraint(['customer_id'], ['customer_master.customer_id'], ),
    sa.ForeignKeyConstraint(['quote_id'], ['quote_header.quote_id'], ),
    sa.PrimaryKeyConstraint('order_id'),
    sa.UniqueConstraint('order_number')
    )
    op.create_table('da_lite_hold_log',
    sa.Column('log_id', sa.UUID(), nullable=False),
    sa.Column('order_id', sa.UUID(), nullable=False),
    sa.Column('action', sa.String(length=20), nullable=False),
    sa.Column('reason', sa.Text(), nullable=False),
    sa.Column('performed_by', sa.UUID(), nullable=False),
    sa.Column('created_at', sa.DateTime(), nullable=True),
    sa.ForeignKeyConstraint(['order_id'], ['build_order.order_id'], ),
    sa.PrimaryKeyConstraint('log_id')
    )
    op.create_table('pre_production_hold',
    sa.Column('hold_id', sa.UUID(), nullable=False),
    sa.Column('order_id', sa.UUID(), nullable=False),
    sa.Column('blocker_type', sa.String(length=50), nullable=False),
    sa.Column('description', sa.Text(), nullable=True),
    sa.Column('status', sa.String(length=20), nullable=False),
    sa.Column('resolved_by', sa.UUID(), nullable=True),
    sa.Column('resolved_at', sa.DateTime(), nullable=True),
    sa.Column('created_at', sa.DateTime(), nullable=True),
    sa.ForeignKeyConstraint(['order_id'], ['build_order.order_id'], ),
    sa.PrimaryKeyConstraint('hold_id')
    )
    # ### end Alembic commands ###


def downgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_table('pre_production_hold')
    op.drop_table('da_lite_hold_log')
    op.drop_table('build_order')
    op.drop_table('sales_activity_log')
    # ### end Alembic commands ###
