diff --git a/alembic/versions/20260805_task_instance_period_label.py b/alembic/versions/20260805_task_instance_period_label.py new file mode 100644 index 0000000..08c0fc5 --- /dev/null +++ b/alembic/versions/20260805_task_instance_period_label.py @@ -0,0 +1,56 @@ +"""add period label to client service task instances + +Revision ID: 20260805_task_instance_period_label +Revises: 20260805_periodic_engagements +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy import inspect + +revision = "20260805_task_instance_period_label" +down_revision = "20260805_periodic_engagements" +branch_labels = None +depends_on = None + +TABLE = "client_service_task_instances" +INDEX = "ix_csti_period_label" + + +def _inspector(): + return inspect(op.get_bind()) + + +def _columns() -> set[str]: + return {row["name"] for row in _inspector().get_columns(TABLE)} + + +def _indexes() -> set[str]: + return {row.get("name") for row in _inspector().get_indexes(TABLE) if row.get("name")} + + +def upgrade(): + if "period_label" not in _columns(): + op.add_column( + TABLE, + sa.Column("period_label", sa.String(length=30), nullable=False, server_default=""), + ) + + op.execute( + """ + UPDATE client_service_task_instances AS task + SET period_label = COALESCE(subscription.period_label, '') + FROM client_service_subscriptions AS subscription + WHERE task.subscription_id = subscription.id + AND COALESCE(task.period_label, '') = '' + """ + ) + + if INDEX not in _indexes(): + op.create_index(INDEX, TABLE, ["period_label"], unique=False) + + +def downgrade(): + if INDEX in _indexes(): + op.drop_index(INDEX, table_name=TABLE) + if "period_label" in _columns(): + op.drop_column(TABLE, "period_label") diff --git a/app/modules/services/execution.py b/app/modules/services/execution.py index 5172243..bc1d2f5 100644 --- a/app/modules/services/execution.py +++ b/app/modules/services/execution.py @@ -235,6 +235,7 @@ def generate_tasks_for_subscription(db: Session, *, subscription: ClientServiceS service_catalogue_id=subscription.service_catalogue_id, firm_task_template_id=template.id, financial_year=subscription.financial_year, + period_label=getattr(subscription, "period_label", "") or "", assessment_year=subscription.assessment_year, task_name=template.task_name, description=template.description,