Jul 8 - Implement issue assignment separation
This commit is contained in:
@@ -245,9 +245,23 @@ issues: id, inspection_id (nullable), area_id, facility_id (nullable), severity
|
||||
mobile_local_id VARCHAR(64) nullable indexed, ← Phase B
|
||||
vendor_name VARCHAR(100) nullable, ← Phase 26
|
||||
vendor_contact VARCHAR(200) nullable, ← Phase 26
|
||||
vendor_notes TEXT nullable ← Phase 26
|
||||
vendor_notes TEXT nullable, ← Phase 26
|
||||
handler_type ENUM('internal','facility','vendor') NOT NULL DEFAULT 'internal', ← Phase 35
|
||||
facility_handler_name VARCHAR(100) nullable, ← Phase 35
|
||||
facility_handler_contact VARCHAR(200) nullable, ← Phase 35
|
||||
facility_handler_notes TEXT nullable ← Phase 35
|
||||
```
|
||||
|
||||
**Handler (`handler_type`, Phase 35) — who is doing the work:**
|
||||
|
||||
| Value | Meaning | Detail fields | `assigned_to` role |
|
||||
|---|---|---|---|
|
||||
| `internal` (default) | Our staff | — (the assignee IS the handler) | the handler |
|
||||
| `facility` | The facility's own staff | `facility_handler_name/contact/notes` (free text) | internal **follow-up owner** |
|
||||
| `vendor` | External contractor | `vendor_name/contact/notes` (Phase 26) | internal **follow-up owner** |
|
||||
|
||||
`assigned_to` (a JQC User) is **always** available: it is the handler for `internal`, and the internal follow-up owner (e.g. the inspector who verifies/updates) for `facility`/`vendor`. Set via the **Update Issue** panel on the issue detail page — the "Handled By" selector reveals the facility or vendor sub-fields via JS. Triage of `handler_type` + facility/vendor detail fields is **admin/director/project_manager only** (same gate as vendor fields); `assigned_to` remains admin/director. Issue list is filterable by `?handler_type=` and shows a Facility/Vendor badge. `Issue.handler_label` gives the display string. Not yet exposed in the mobile API.
|
||||
|
||||
**Photo columns — three distinct fields with different semantics:**
|
||||
|
||||
| Column | Type | Populated by | Displayed as |
|
||||
@@ -714,7 +728,8 @@ phase1_projects_roles → phase6_features → phase7_mobile_api → phase8_notif
|
||||
→ phase31_device_registry
|
||||
→ phase32_device_token_columns
|
||||
→ phase33_contract_recipients
|
||||
→ phase34_facility_qr ← HEAD
|
||||
→ phase34_facility_qr
|
||||
→ phase35_issue_handler ← HEAD
|
||||
```
|
||||
|
||||
### phase21_performance_indexes
|
||||
@@ -810,6 +825,16 @@ flask db upgrade # adds + backfills public_token
|
||||
sudo systemctl restart gunicorn
|
||||
```
|
||||
|
||||
### phase35_issue_handler
|
||||
|
||||
Revision id `phase35_issue_handler` (file `phase35_issue_handler_type.py`). Adds to `issues`: `handler_type ENUM('internal','facility','vendor') NOT NULL DEFAULT 'internal'` and `facility_handler_name/contact/notes`. **Backfills** existing rows with a non-empty `vendor_name` to `handler_type='vendor'`. Separates WHO handles an issue (see §5 Issue + the Handler section). `INFORMATION_SCHEMA` checks — safe to re-run.
|
||||
|
||||
**Deploy order:**
|
||||
```bash
|
||||
flask db upgrade
|
||||
sudo systemctl restart gunicorn
|
||||
```
|
||||
|
||||
**Deploy order for phases 24–32:**
|
||||
```bash
|
||||
flask db upgrade
|
||||
|
||||
Reference in New Issue
Block a user