feat: Sprint A Wahab review batch — categories, property hierarchy, priority grouping
Items 1-5, 9, 11 from denya-wahab-feedback-s2: - Category.show_in_form (alert-only flag): Gas Leak hidden from issue picker but kept urgent for SLA/alert and reporting; emergency quick path on the new-issue form creates urgent tickets via include_hidden categories. - Seed: Aluminum/Glass, Carpentry, Mould & Damp (Medium default) maintenance categories; Lost Property renamed Missing Item (+ sub). - One alembic migration: add show_in_form (backfill True, Gas Leak False) + data rename Lost Property -> Missing Item. - Property -> Building -> Apartment cascade with searchable apartment combobox on the new-issue form and ticket list filters; /api/tickets/units gains building filter + /units/grouped variant; /api/tickets gains additive building/unit_id filters. apartment_mapping.json committed (deterministic). - Group-by-priority toggle on /tickets (four sections + unknown bucket, age-sortable, composes with filters, URL deep links), FM dashboard active tickets, and CS dashboard priority card click-through. - Tests: 13 new (category visibility, seed idempotency/sync, unit grouping, ticket building/unit filters).
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
"""category show_in_form column + Lost Property → Missing Item rename
|
||||
|
||||
Revision ID: b2f4a6c8e0d2
|
||||
Revises: 795c6b95f637
|
||||
Create Date: 2026-08-02 00:00:00.000000
|
||||
|
||||
Sprint A (Wahab feedback batch): one schema change + one data rename.
|
||||
|
||||
* Add ``categories.show_in_form`` (bool, default True) and backfill existing
|
||||
rows to True; flip Gas Leak to False (alert-only: still urgent for SLA/alert
|
||||
and reporting, but hidden from the new-issue category picker).
|
||||
* Rename the Customer Service category ``Lost Property`` → ``Missing Item``.
|
||||
The seed is insert-if-missing, so without this data migration an existing
|
||||
database would keep the old row and the seed would create a duplicate.
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = 'b2f4a6c8e0d2'
|
||||
down_revision: Union[str, Sequence[str], None] = '795c6b95f637'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
"""Add show_in_form, backfill True, hide Gas Leak, rename Lost Property."""
|
||||
op.add_column(
|
||||
'categories',
|
||||
sa.Column(
|
||||
'show_in_form',
|
||||
sa.Boolean(),
|
||||
nullable=False,
|
||||
server_default=sa.true(),
|
||||
comment='Visible in the new-issue category picker (False = alert-only, e.g. Gas Leak)',
|
||||
),
|
||||
)
|
||||
# Backfill: Gas Leak stays in the SLA/alert table (urgent) but is hidden
|
||||
# from the new-issue picker.
|
||||
op.execute(
|
||||
"UPDATE categories SET show_in_form = 0 "
|
||||
"WHERE type = 'emergency' AND name = 'Gas Leak' AND parent_id IS NULL"
|
||||
)
|
||||
# Rename Lost Property → Missing Item (data migration; seed is insert-if-missing).
|
||||
op.execute(
|
||||
"UPDATE categories SET name = 'Missing Item' "
|
||||
"WHERE type = 'cs' AND name = 'Lost Property'"
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
"""Reverse the rename and drop the column."""
|
||||
op.execute(
|
||||
"UPDATE categories SET name = 'Lost Property' "
|
||||
"WHERE type = 'cs' AND name = 'Missing Item'"
|
||||
)
|
||||
op.drop_column('categories', 'show_in_form')
|
||||
Reference in New Issue
Block a user