diff --git a/api/src/api/v1/forms.py b/api/src/api/v1/forms.py index a52e5a2..dfeb922 100644 --- a/api/src/api/v1/forms.py +++ b/api/src/api/v1/forms.py @@ -69,6 +69,7 @@ async def get_forms( with_count=True, offset=offset, limit=limit, + load_org=True, ) return BaseListResponse( result = [ diff --git a/api/src/db/models/budget_form.py b/api/src/db/models/budget_form.py index 3800da9..f9dee74 100644 --- a/api/src/db/models/budget_form.py +++ b/api/src/db/models/budget_form.py @@ -1,4 +1,5 @@ from datetime import datetime +import typing from sqlalchemy import DateTime, ForeignKey, Integer, String, func from sqlalchemy.orm import Mapped, mapped_column, relationship @@ -39,9 +40,9 @@ class BudgetForm(Base): # updater: Mapped[typing.Optional["AppUser"]] = relationship( # "AppUser", back_populates="updated_budget_forms", foreign_keys=[updated_by] # ) -# org_unit: Mapped[typing.Optional["OrgUnit"]] = relationship( -# "OrgUnit", back_populates="budget_forms" -# ) + org_unit: Mapped[typing.Optional["OrgUnit"]] = relationship( + "OrgUnit", #back_populates="budget_forms" + ) # budget_lines: Mapped[list["BudgetLine"]] = relationship( # "BudgetLine", back_populates="budget_form" # ) diff --git a/api/src/domain/schemas.py b/api/src/domain/schemas.py index 7b68b63..330012e 100644 --- a/api/src/domain/schemas.py +++ b/api/src/domain/schemas.py @@ -172,6 +172,15 @@ class FormTypeSchemaEnum(str, enum.Enum): FORM_4 = "FORM_4" +class OrgUnitSchema(BaseModel): + id: int + title: str + is_active: bool + is_ssp: bool + + class Config: + from_attributes = True + class BudgetFormResponse(BaseModel): id: int created_at: datetime @@ -180,6 +189,7 @@ class BudgetFormResponse(BaseModel): form_type_code: FormTypeSchemaEnum year: int org_unit_id: int + org_unit: OrgUnitSchema | None = None class Config: from_attributes = True diff --git a/api/src/repository/budget_form_repository.py b/api/src/repository/budget_form_repository.py index 7436b97..5d719b3 100644 --- a/api/src/repository/budget_form_repository.py +++ b/api/src/repository/budget_form_repository.py @@ -16,6 +16,7 @@ class BudgetFormRepository: limit: int | None = None, org_unit: int | list[int] | None = None, with_count: bool = False, + load_org: bool = False, ) -> list[BudgetForm] | tuple[int, list[BudgetForm]]: if with_count: query = select(func.count().over().label("total_count"), BudgetForm) @@ -28,7 +29,13 @@ class BudgetFormRepository: else: where.append(BudgetForm.org_unit_id.in_(org_unit)) - query = query.where(*where).order_by(BudgetForm.id) + + query = query.where(*where) + if load_org: + query = query.options( + joinedload(BudgetForm.org_unit) + ) + query = query.order_by(BudgetForm.id) if offset is not None: query = query.offset(offset) diff --git a/api/src/services/budget_form_service.py b/api/src/services/budget_form_service.py index 353fa1e..8091310 100644 --- a/api/src/services/budget_form_service.py +++ b/api/src/services/budget_form_service.py @@ -20,13 +20,15 @@ class BudgetFormService: user: AppUser, offset: int | None = None, limit: int | None = None, - with_count: bool = False + with_count: bool = False, + load_org: bool = False, ) -> list[BudgetForm] | tuple[int, list[BudgetForm]]: if user.role_id == UserRoleEnum.ADMIN: return await self.bf_repo.get_list( offset=offset, limit=limit, with_count=with_count, + load_org=load_org, ) user = await self.user_repo.get( user_id=user.id, @@ -37,6 +39,7 @@ class BudgetFormService: limit=limit, org_unit=[ou.id for ou in user.org_units], with_count=with_count, + load_org=load_org, ) async def get(