Add phase 1 client consultant referral and linkage

This commit is contained in:
A R R R Associates
2026-07-22 23:45:05 +05:30
parent 02a549bd05
commit 8f51d16c7d
10 changed files with 290 additions and 5 deletions
@@ -0,0 +1,53 @@
"""Phase 1 client-consultant referral and communication linkage.
Revision ID: 20260722_phase1_client_consultant_linkage
Revises: 20260720_document_vps_auto_cleanup
"""
from alembic import op
import sqlalchemy as sa
revision = "20260722_phase1_client_consultant_linkage"
down_revision = "20260720_document_vps_auto_cleanup"
branch_labels = None
depends_on = None
def upgrade() -> None:
with op.batch_alter_table("clients") as batch:
batch.add_column(sa.Column("referred_by_consultant_id", sa.Integer(), nullable=True))
batch.add_column(sa.Column("referral_date", sa.Date(), nullable=True))
batch.add_column(sa.Column("referral_reference", sa.String(length=200), nullable=True))
batch.add_column(sa.Column("referral_status", sa.String(length=30), nullable=False, server_default="active"))
batch.add_column(sa.Column("communication_routing_mode", sa.String(length=30), nullable=False, server_default="client_and_consultant"))
batch.create_foreign_key("fk_clients_referred_by_consultant", "consultant_profiles", ["referred_by_consultant_id"], ["id"], ondelete="SET NULL")
batch.create_index("ix_clients_referred_by_consultant_id", ["referred_by_consultant_id"], unique=False)
batch.create_index("ix_clients_referral_status", ["referral_status"], unique=False)
batch.create_index("ix_clients_communication_routing_mode", ["communication_routing_mode"], unique=False)
additions = [
("can_view_engagements", True), ("can_view_task_status", True), ("can_view_assignee", True),
("can_view_document_requests", True), ("can_upload_documents", True),
("can_reply_to_clarifications", True), ("can_view_filing_details", True),
("can_view_final_documents", True), ("can_view_permanent_documents", False),
("can_receive_notifications", True), ("can_act_for_client", True),
]
with op.batch_alter_table("client_consultant_links") as batch:
for name, default in additions:
batch.add_column(sa.Column(name, sa.Boolean(), nullable=False, server_default=sa.true() if default else sa.false()))
batch.add_column(sa.Column("effective_from", sa.Date(), nullable=True))
batch.add_column(sa.Column("effective_to", sa.Date(), nullable=True))
def downgrade() -> None:
with op.batch_alter_table("client_consultant_links") as batch:
batch.drop_column("effective_to")
batch.drop_column("effective_from")
for name in ["can_act_for_client", "can_receive_notifications", "can_view_permanent_documents", "can_view_final_documents", "can_view_filing_details", "can_reply_to_clarifications", "can_upload_documents", "can_view_document_requests", "can_view_assignee", "can_view_task_status", "can_view_engagements"]:
batch.drop_column(name)
with op.batch_alter_table("clients") as batch:
batch.drop_index("ix_clients_communication_routing_mode")
batch.drop_index("ix_clients_referral_status")
batch.drop_index("ix_clients_referred_by_consultant_id")
batch.drop_constraint("fk_clients_referred_by_consultant", type_="foreignkey")
batch.drop_column("communication_routing_mode")
batch.drop_column("referral_status")
batch.drop_column("referral_reference")
batch.drop_column("referral_date")
batch.drop_column("referred_by_consultant_id")