From 7d34376abe67a90961e73ac2a39228c4b06e3ca8 Mon Sep 17 00:00:00 2001 From: tsygankoviva Date: Thu, 4 Jun 2026 16:01:13 +0300 Subject: [PATCH 1/2] =?UTF-8?q?change-role-fix:=20=D0=BE=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=BD=D0=BE=D0=B5=20=D0=B7=D0=BD=D0=B0?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D1=81=D0=BF=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=20=D1=81=D0=BC=D0=B5=D0=BD=D0=B5=20=D1=80=D0=BE?= =?UTF-8?q?=D0=BB=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/src/repository/user_repository.py | 2 +- api/src/services/user_service.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/api/src/repository/user_repository.py b/api/src/repository/user_repository.py index 5ee7413..e841ada 100644 --- a/api/src/repository/user_repository.py +++ b/api/src/repository/user_repository.py @@ -167,7 +167,7 @@ class UserRepository: ), {"user_id": user_id, "org_unit_ids": org_unit_ids}, ) - await self.db.commit() + await self.db.flush() async def create(self, user_data: dict) -> AppUser: hashed_password = ( diff --git a/api/src/services/user_service.py b/api/src/services/user_service.py index 0d0bf27..55db948 100644 --- a/api/src/services/user_service.py +++ b/api/src/services/user_service.py @@ -112,6 +112,7 @@ class UserService: if (had_many_ssp_role and not has_many_ssp_role_now) or is_executor_to_dfip_transition: await self.user_repo.clear_many_ssp(user_id) if user_data.load_orgs: + self.db.expire(updated) updated = await self.user_repo.get( user_id=user_id, load_orgs=user_data.load_orgs, From 71deb55485ff648e0dd200db403d2fad33baf46c Mon Sep 17 00:00:00 2001 From: tsygankoviva Date: Thu, 4 Jun 2026 17:29:59 +0300 Subject: [PATCH 2/2] =?UTF-8?q?export-direction-fix:=20=D1=83=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=BB=20=D0=BE=D0=B1=D1=8F=D0=B7=D0=B0=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B2=D0=BE=D0=B9=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20dir?= =?UTF-8?q?ection=20=D0=BF=D1=80=D0=B8=20=D1=8D=D0=BA=D1=81=D0=BF=D0=BE?= =?UTF-8?q?=D1=80=D1=82=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/src/services/export_service.py | 41 +++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/api/src/services/export_service.py b/api/src/services/export_service.py index e6dd1e9..9c8629f 100644 --- a/api/src/services/export_service.py +++ b/api/src/services/export_service.py @@ -169,13 +169,28 @@ class ExportService: form = await self._get_form_for_export(form_id=form_id, current_user=current_user) sheets = self._resolve_requested_sheets(form=form, requested_sheet=sheet) self._validate_sections_for_form(form=form, sections=sections) - plans = self._build_sheet_plans( - form=form, - sheets=sheets, - direction=direction, - sections=sections, - ignore_non_applicable_query_params=ignore_non_applicable_query_params, - ) + + if direction: + plans = self._build_sheet_plans( + form=form, + sheets=sheets, + direction=direction, + sections=sections, + ignore_non_applicable_query_params=ignore_non_applicable_query_params, + ) + else: + sheets_by_directions = self._resolve_sheets_by_directions(form=form, requested_sheet=sheet) + plans = [] + for dr, shts in sheets_by_directions.items(): + plans += self._build_sheet_plans( + form=form, + sheets=shts, + direction=dr, + sections=sections, + ignore_non_applicable_query_params=ignore_non_applicable_query_params, + ) + + workbook = self._create_workbook_with_metadata(form=form) exported_sheets = 0 @@ -294,6 +309,18 @@ class ExportService: if requested_sheet: return [requested_sheet] return list(form.form_type.sheet_list) + + def _resolve_sheets_by_directions(self, form: Any, requested_sheet: str | None) -> dict[str | None, str]: + result = {} + for sheet in form.form_type.sheet_list_with_directions: + if requested_sheet and sheet["sheet_name"] != requested_sheet: + continue + + if sheet["direction"] in result: + result[sheet["direction"]].append(sheet["sheet_name"]) + else: + result[sheet["direction"]] = [sheet["sheet_name"]] + return result @staticmethod def _validate_sections_for_form(form: Any, sections: list[str] | None) -> None: