From 7317cad4e0a206750c13ee71de8108d931772797 Mon Sep 17 00:00:00 2001 From: David Whittaker Date: Wed, 6 Aug 2025 16:43:36 -0700 Subject: [PATCH 1/4] fix(case): fixes bulk close for cases --- src/dispatch/case/models.py | 2 ++ src/dispatch/case/service.py | 2 +- src/dispatch/static/dispatch/src/case/api.js | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/dispatch/case/models.py b/src/dispatch/case/models.py index 6014bb9451e1..b24ee94abda8 100644 --- a/src/dispatch/case/models.py +++ b/src/dispatch/case/models.py @@ -466,6 +466,8 @@ class CaseRead(CaseBase): class CaseUpdate(CaseBase): """Pydantic model for updating case data.""" + title: str | None = None + description: str | None = None assignee: ParticipantUpdate | None = None case_costs: list[CaseCostUpdate] = [] case_priority: CasePriorityBase | None = None diff --git a/src/dispatch/case/service.py b/src/dispatch/case/service.py index f7006a10e081..988c71c17d05 100644 --- a/src/dispatch/case/service.py +++ b/src/dispatch/case/service.py @@ -388,7 +388,7 @@ def update(*, db_session, case: Case, case_in: CaseUpdate, current_user: Dispatc case_id=case.id, ) - if case.visibility != case_in.visibility: + if case_in.visibility and case.visibility != case_in.visibility: case.visibility = case_in.visibility event_service.log_case_event( diff --git a/src/dispatch/static/dispatch/src/case/api.js b/src/dispatch/static/dispatch/src/case/api.js index d15d63390cf8..12dea165d91a 100644 --- a/src/dispatch/static/dispatch/src/case/api.js +++ b/src/dispatch/static/dispatch/src/case/api.js @@ -34,7 +34,7 @@ export default { bulkUpdate(cases, payload) { return Promise.all( cases.map((case_obj) => { - return this.update(case_obj.id, { ...case_obj, ...payload }) + return this.update(case_obj.id, payload) }) ) }, From 0411b19120b4f68d189429c8df4e40f9b40f5eff Mon Sep 17 00:00:00 2001 From: David Whittaker Date: Wed, 6 Aug 2025 16:54:36 -0700 Subject: [PATCH 2/4] simplifying to just fetching full case in each iteration --- src/dispatch/case/models.py | 2 -- src/dispatch/case/service.py | 2 +- src/dispatch/static/dispatch/src/case/api.js | 6 ++++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/dispatch/case/models.py b/src/dispatch/case/models.py index b24ee94abda8..6014bb9451e1 100644 --- a/src/dispatch/case/models.py +++ b/src/dispatch/case/models.py @@ -466,8 +466,6 @@ class CaseRead(CaseBase): class CaseUpdate(CaseBase): """Pydantic model for updating case data.""" - title: str | None = None - description: str | None = None assignee: ParticipantUpdate | None = None case_costs: list[CaseCostUpdate] = [] case_priority: CasePriorityBase | None = None diff --git a/src/dispatch/case/service.py b/src/dispatch/case/service.py index 988c71c17d05..f7006a10e081 100644 --- a/src/dispatch/case/service.py +++ b/src/dispatch/case/service.py @@ -388,7 +388,7 @@ def update(*, db_session, case: Case, case_in: CaseUpdate, current_user: Dispatc case_id=case.id, ) - if case_in.visibility and case.visibility != case_in.visibility: + if case.visibility != case_in.visibility: case.visibility = case_in.visibility event_service.log_case_event( diff --git a/src/dispatch/static/dispatch/src/case/api.js b/src/dispatch/static/dispatch/src/case/api.js index 12dea165d91a..0b8a3aa60421 100644 --- a/src/dispatch/static/dispatch/src/case/api.js +++ b/src/dispatch/static/dispatch/src/case/api.js @@ -33,8 +33,10 @@ export default { bulkUpdate(cases, payload) { return Promise.all( - cases.map((case_obj) => { - return this.update(case_obj.id, payload) + cases.map(async (case_obj) => { + // Fetch the full case data to ensure all required fields are available + const fullCase = await this.get(case_obj.id) + return this.update(case_obj.id, { ...fullCase.data, ...payload }) }) ) }, From c095d06609f46358621e38274fabb29361f7fb07 Mon Sep 17 00:00:00 2001 From: David Whittaker Date: Wed, 6 Aug 2025 17:02:40 -0700 Subject: [PATCH 3/4] using promise instead to fetch all --- src/dispatch/static/dispatch/src/case/api.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/dispatch/static/dispatch/src/case/api.js b/src/dispatch/static/dispatch/src/case/api.js index 0b8a3aa60421..9307da3692a0 100644 --- a/src/dispatch/static/dispatch/src/case/api.js +++ b/src/dispatch/static/dispatch/src/case/api.js @@ -34,9 +34,14 @@ export default { bulkUpdate(cases, payload) { return Promise.all( cases.map(async (case_obj) => { - // Fetch the full case data to ensure all required fields are available - const fullCase = await this.get(case_obj.id) - return this.update(case_obj.id, { ...fullCase.data, ...payload }) + try { + // Fetch the full case data to ensure all required fields are available + const fullCase = await this.get(case_obj.id) + const updateResult = await this.update(case_obj.id, { ...fullCase.data, ...payload }) + return { caseId: case_obj.id, success: true, data: updateResult.data } + } catch (error) { + return { caseId: case_obj.id, success: false, error: error.message } + } }) ) }, From cea09808c1cc71f11a7f95d60e78dfe33cf0f006 Mon Sep 17 00:00:00 2001 From: David Whittaker Date: Thu, 7 Aug 2025 09:05:11 -0700 Subject: [PATCH 4/4] fixing return response --- src/dispatch/static/dispatch/src/case/api.js | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/dispatch/static/dispatch/src/case/api.js b/src/dispatch/static/dispatch/src/case/api.js index 9307da3692a0..0b8a3aa60421 100644 --- a/src/dispatch/static/dispatch/src/case/api.js +++ b/src/dispatch/static/dispatch/src/case/api.js @@ -34,14 +34,9 @@ export default { bulkUpdate(cases, payload) { return Promise.all( cases.map(async (case_obj) => { - try { - // Fetch the full case data to ensure all required fields are available - const fullCase = await this.get(case_obj.id) - const updateResult = await this.update(case_obj.id, { ...fullCase.data, ...payload }) - return { caseId: case_obj.id, success: true, data: updateResult.data } - } catch (error) { - return { caseId: case_obj.id, success: false, error: error.message } - } + // Fetch the full case data to ensure all required fields are available + const fullCase = await this.get(case_obj.id) + return this.update(case_obj.id, { ...fullCase.data, ...payload }) }) ) },