no-mistakes(review): Extend legacy self-heal rename; clear stale Mould & Damp priority default

This commit is contained in:
root
2026-08-02 13:22:32 +00:00
parent db6826cb49
commit 663354eeaf
2 changed files with 27 additions and 7 deletions
+11 -1
View File
@@ -20,7 +20,7 @@ logger = logging.getLogger(__name__)
async def ensure_legacy_schema(conn) -> None: async def ensure_legacy_schema(conn) -> None:
"""Add columns from alembic migrations that legacy create_all databases lack.""" """Add columns/data changes from alembic migrations that legacy create_all databases lack."""
result = await conn.execute(text("PRAGMA table_info(categories)")) result = await conn.execute(text("PRAGMA table_info(categories)"))
columns = {row[1] for row in result} columns = {row[1] for row in result}
if "show_in_form" not in columns: if "show_in_form" not in columns:
@@ -28,6 +28,16 @@ async def ensure_legacy_schema(conn) -> None:
text("ALTER TABLE categories ADD COLUMN show_in_form BOOLEAN NOT NULL DEFAULT 1") text("ALTER TABLE categories ADD COLUMN show_in_form BOOLEAN NOT NULL DEFAULT 1")
) )
logger.info("Added missing categories.show_in_form column (legacy database)") logger.info("Added missing categories.show_in_form column (legacy database)")
result = await conn.execute(
text(
"UPDATE categories SET name = 'Missing Item' "
"WHERE type = 'cs' AND name = 'Lost Property' AND parent_id IS NULL "
"AND NOT EXISTS (SELECT 1 FROM categories c2 "
"WHERE c2.type = 'cs' AND c2.name = 'Missing Item' AND c2.parent_id IS NULL)"
)
)
if result.rowcount:
logger.info("Renamed legacy 'Lost Property' category to 'Missing Item'")
@asynccontextmanager @asynccontextmanager
+16 -6
View File
@@ -111,19 +111,19 @@
<label class="block text-sm font-medium text-gray-700 mb-1">Priority</label> <label class="block text-sm font-medium text-gray-700 mb-1">Priority</label>
<div class="grid grid-cols-2 md:grid-cols-4 gap-2"> <div class="grid grid-cols-2 md:grid-cols-4 gap-2">
<label class="flex items-center p-3 border rounded-lg cursor-pointer hover:bg-gray-50" :class="form.priority === 'urgent' ? 'border-red-500 bg-red-50' : 'border-gray-200'"> <label class="flex items-center p-3 border rounded-lg cursor-pointer hover:bg-gray-50" :class="form.priority === 'urgent' ? 'border-red-500 bg-red-50' : 'border-gray-200'">
<input type="radio" name="priority" value="urgent" x-model="form.priority" class="sr-only"> <input type="radio" name="priority" value="urgent" x-model="form.priority" @change="priorityAuto = false" class="sr-only">
<span class="text-sm">🔴 Urgent</span> <span class="text-sm">🔴 Urgent</span>
</label> </label>
<label class="flex items-center p-3 border rounded-lg cursor-pointer hover:bg-gray-50" :class="form.priority === 'high' ? 'border-orange-500 bg-orange-50' : 'border-gray-200'"> <label class="flex items-center p-3 border rounded-lg cursor-pointer hover:bg-gray-50" :class="form.priority === 'high' ? 'border-orange-500 bg-orange-50' : 'border-gray-200'">
<input type="radio" name="priority" value="high" x-model="form.priority" class="sr-only"> <input type="radio" name="priority" value="high" x-model="form.priority" @change="priorityAuto = false" class="sr-only">
<span class="text-sm">🟠 High</span> <span class="text-sm">🟠 High</span>
</label> </label>
<label class="flex items-center p-3 border rounded-lg cursor-pointer hover:bg-gray-50" :class="form.priority === 'medium' ? 'border-yellow-500 bg-yellow-50' : 'border-gray-200'"> <label class="flex items-center p-3 border rounded-lg cursor-pointer hover:bg-gray-50" :class="form.priority === 'medium' ? 'border-yellow-500 bg-yellow-50' : 'border-gray-200'">
<input type="radio" name="priority" value="medium" x-model="form.priority" class="sr-only"> <input type="radio" name="priority" value="medium" x-model="form.priority" @change="priorityAuto = false" class="sr-only">
<span class="text-sm">🟡 Medium</span> <span class="text-sm">🟡 Medium</span>
</label> </label>
<label class="flex items-center p-3 border rounded-lg cursor-pointer hover:bg-gray-50" :class="form.priority === 'low' ? 'border-green-500 bg-green-50' : 'border-gray-200'"> <label class="flex items-center p-3 border rounded-lg cursor-pointer hover:bg-gray-50" :class="form.priority === 'low' ? 'border-green-500 bg-green-50' : 'border-gray-200'">
<input type="radio" name="priority" value="low" x-model="form.priority" class="sr-only"> <input type="radio" name="priority" value="low" x-model="form.priority" @change="priorityAuto = false" class="sr-only">
<span class="text-sm">🟢 Low</span> <span class="text-sm">🟢 Low</span>
</label> </label>
</div> </div>
@@ -207,6 +207,7 @@
reporter: '', reporter: '',
reported_via: '' reported_via: ''
}, },
priorityAuto: false,
categories: [], categories: [],
subCategories: [], subCategories: [],
unitGroups: {}, unitGroups: {},
@@ -237,6 +238,7 @@
} else { } else {
this.form.priority = ''; this.form.priority = '';
} }
this.priorityAuto = false;
this.loadCategories(); this.loadCategories();
}, },
@@ -319,8 +321,16 @@
'Aluminum/Glass': 'Windows, doors, sliding/fixed panels, glass and mirror replacement.' 'Aluminum/Glass': 'Windows, doors, sliding/fixed panels, glass and mirror replacement.'
}; };
if (parent?.name && hints[parent.name]) this.selectedCategoryHint = hints[parent.name]; if (parent?.name && hints[parent.name]) this.selectedCategoryHint = hints[parent.name];
// Mould & Damp defaults to Medium priority // Mould & Damp defaults to Medium priority; clear the auto-default
if (parent?.name === 'Mould & Damp' && !this.form.priority) this.form.priority = 'medium'; // when switching away so a non-Mould ticket doesn't keep it silently
if (parent?.name !== 'Mould & Damp' && this.priorityAuto) {
this.form.priority = '';
this.priorityAuto = false;
}
if (parent?.name === 'Mould & Damp' && !this.form.priority) {
this.form.priority = 'medium';
this.priorityAuto = true;
}
}, },
handlePhotos(e) { handlePhotos(e) {