Prepare ERP source for Gitea deployment

This commit is contained in:
A R R R Associates
2026-06-20 15:01:44 +05:30
commit 5c75eb6bd9
450 changed files with 67698 additions and 0 deletions
@@ -0,0 +1,79 @@
"""consultant conversion and workspace limits phase 5a7 5a8
Revision ID: 20260512_consultant_conversion_limits_phase_5a7_5a8
Revises: 20260511_consultant_completion_phase_5a5_5a6
Create Date: 2026-05-12
"""
from __future__ import annotations
from alembic import op
import sqlalchemy as sa
revision = "20260512_consultant_conversion_limits_phase_5a7_5a8"
down_revision = "20260511_consultant_completion_phase_5a5_5a6"
branch_labels = None
depends_on = None
def _has_column(table_name: str, column_name: str) -> bool:
bind = op.get_bind()
inspector = sa.inspect(bind)
return column_name in {col["name"] for col in inspector.get_columns(table_name)}
def _has_index(table_name: str, index_name: str) -> bool:
bind = op.get_bind()
inspector = sa.inspect(bind)
return index_name in {idx["name"] for idx in inspector.get_indexes(table_name)}
def upgrade() -> None:
table = "consultant_managed_clients"
if not _has_column(table, "conversion_status"):
op.add_column(table, sa.Column("conversion_status", sa.String(length=30), nullable=False, server_default="not_requested"))
if not _has_column(table, "conversion_requested_at_utc"):
op.add_column(table, sa.Column("conversion_requested_at_utc", sa.DateTime(timezone=True), nullable=True))
if not _has_column(table, "conversion_requested_by_user_id"):
op.add_column(table, sa.Column("conversion_requested_by_user_id", sa.Integer(), nullable=True))
if not _has_column(table, "conversion_reviewed_at_utc"):
op.add_column(table, sa.Column("conversion_reviewed_at_utc", sa.DateTime(timezone=True), nullable=True))
if not _has_column(table, "conversion_reviewed_by_user_id"):
op.add_column(table, sa.Column("conversion_reviewed_by_user_id", sa.Integer(), nullable=True))
if not _has_column(table, "conversion_notes"):
op.add_column(table, sa.Column("conversion_notes", sa.Text(), nullable=True))
if not _has_column(table, "conversion_firm_notes"):
op.add_column(table, sa.Column("conversion_firm_notes", sa.Text(), nullable=True))
if not _has_index(table, "ix_consultant_managed_clients_conversion_status"):
op.create_index("ix_consultant_managed_clients_conversion_status", table, ["conversion_status"])
if not _has_index(table, "ix_consultant_managed_clients_conversion_requested_by_user_id"):
op.create_index("ix_consultant_managed_clients_conversion_requested_by_user_id", table, ["conversion_requested_by_user_id"])
if not _has_index(table, "ix_consultant_managed_clients_conversion_reviewed_by_user_id"):
op.create_index("ix_consultant_managed_clients_conversion_reviewed_by_user_id", table, ["conversion_reviewed_by_user_id"])
# SQLite supports ALTER TABLE ADD COLUMN but does not always enforce server default cleanup safely.
# Keeping the server default is intentional so existing local installs remain simple and stable.
def downgrade() -> None:
table = "consultant_managed_clients"
for index_name in [
"ix_consultant_managed_clients_conversion_reviewed_by_user_id",
"ix_consultant_managed_clients_conversion_requested_by_user_id",
"ix_consultant_managed_clients_conversion_status",
]:
if _has_index(table, index_name):
op.drop_index(index_name, table_name=table)
for column_name in [
"conversion_firm_notes",
"conversion_notes",
"conversion_reviewed_by_user_id",
"conversion_reviewed_at_utc",
"conversion_requested_by_user_id",
"conversion_requested_at_utc",
"conversion_status",
]:
if _has_column(table, column_name):
op.drop_column(table, column_name)