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,86 @@
"""consultant communications and service requests phase 5a5 5a6
Revision ID: 20260511_consultant_completion_phase_5a5_5a6
Revises: 20260510_consultant_workspace_phase_5a3
Create Date: 2026-05-11
"""
from __future__ import annotations
from alembic import op
import sqlalchemy as sa
revision = "20260511_consultant_completion_phase_5a5_5a6"
down_revision = "20260510_consultant_workspace_phase_5a3"
branch_labels = None
depends_on = None
def _has_table(bind, table_name: str) -> bool:
return sa.inspect(bind).has_table(table_name)
def _has_column(bind, table_name: str, column_name: str) -> bool:
if not _has_table(bind, table_name):
return False
return column_name in {col["name"] for col in sa.inspect(bind).get_columns(table_name)}
def upgrade() -> None:
bind = op.get_bind()
if not _has_table(bind, "consultant_service_requests"):
op.create_table(
"consultant_service_requests",
sa.Column("id", sa.Integer(), primary_key=True, autoincrement=True),
sa.Column("tenant_id", sa.Integer(), sa.ForeignKey("tenants.id", ondelete="CASCADE"), nullable=False),
sa.Column("branch_id", sa.Integer(), sa.ForeignKey("branches.id"), nullable=True),
sa.Column("consultant_id", sa.Integer(), sa.ForeignKey("consultant_profiles.id", ondelete="CASCADE"), nullable=False),
sa.Column("managed_client_id", sa.Integer(), sa.ForeignKey("consultant_managed_clients.id", ondelete="SET NULL"), nullable=True),
sa.Column("firm_client_id", sa.Integer(), sa.ForeignKey("clients.id", ondelete="SET NULL"), nullable=True),
sa.Column("service_catalogue_id", sa.Integer(), sa.ForeignKey("service_catalogues.id", ondelete="SET NULL"), nullable=True),
sa.Column("request_no", sa.String(length=50), nullable=False),
sa.Column("request_type", sa.String(length=50), nullable=False, server_default="service_request"),
sa.Column("status", sa.String(length=40), nullable=False, server_default="submitted"),
sa.Column("priority", sa.String(length=30), nullable=False, server_default="normal"),
sa.Column("requested_service_name", sa.String(length=200), nullable=False),
sa.Column("requested_due_date", sa.Date(), nullable=True),
sa.Column("subject", sa.String(length=255), nullable=False),
sa.Column("description", sa.Text(), nullable=True),
sa.Column("consultant_notes", sa.Text(), nullable=True),
sa.Column("firm_response", sa.Text(), nullable=True),
sa.Column("created_by_user_id", sa.Integer(), sa.ForeignKey("users.id"), nullable=True),
sa.Column("updated_by_user_id", sa.Integer(), sa.ForeignKey("users.id"), nullable=True),
sa.Column("reviewed_by_user_id", sa.Integer(), sa.ForeignKey("users.id"), nullable=True),
sa.Column("reviewed_at_utc", sa.DateTime(timezone=True), nullable=True),
sa.Column("created_at_utc", sa.DateTime(timezone=True), nullable=False, server_default=sa.text("CURRENT_TIMESTAMP")),
sa.Column("updated_at_utc", sa.DateTime(timezone=True), nullable=False, server_default=sa.text("CURRENT_TIMESTAMP")),
sa.Column("is_active", sa.Boolean(), nullable=False, server_default=sa.text("1")),
)
for index_name, columns in {
"ix_consultant_service_requests_tenant_id": ["tenant_id"],
"ix_consultant_service_requests_branch_id": ["branch_id"],
"ix_consultant_service_requests_consultant_id": ["consultant_id"],
"ix_consultant_service_requests_managed_client_id": ["managed_client_id"],
"ix_consultant_service_requests_firm_client_id": ["firm_client_id"],
"ix_consultant_service_requests_service_catalogue_id": ["service_catalogue_id"],
"ix_consultant_service_requests_request_no": ["request_no"],
"ix_consultant_service_requests_status": ["status"],
"ix_consultant_service_requests_priority": ["priority"],
"ix_consultant_service_requests_is_active": ["is_active"],
}.items():
try:
op.create_index(index_name, "consultant_service_requests", columns)
except Exception:
pass
if _has_table(bind, "service_catalogues") and not _has_column(bind, "service_catalogues", "is_consultant_requestable"):
with op.batch_alter_table("service_catalogues") as batch_op:
batch_op.add_column(sa.Column("is_consultant_requestable", sa.Boolean(), nullable=False, server_default=sa.text("0")))
def downgrade() -> None:
bind = op.get_bind()
if _has_table(bind, "consultant_service_requests"):
op.drop_table("consultant_service_requests")