alchemy functions updated

This commit is contained in:
2024-11-10 12:49:31 +03:00
parent e01a2c8afb
commit 7a7241c71c
13 changed files with 238 additions and 180 deletions

View File

@@ -41,7 +41,7 @@ class BuildListEventMethods(MethodToEvent):
if isinstance(token_dict, OccupantTokenObject):
Build.pre_query = Build.filter_all(
Build.id == token_dict.selected_occupant.build_id,
Build.active == True,
*Build.valid_record_args(Build),
).query
elif isinstance(token_dict, EmployeeTokenObject):
Build.pre_query = Build.select_action(
@@ -50,8 +50,8 @@ class BuildListEventMethods(MethodToEvent):
Build.filter_attr = list_options
records = Build.filter_all(
*Build.get_smart_query(smart_query=list_options.query),
Build.active == True,
)
*Build.valid_record_args(Build),
).data
return AlchemyJsonResponse(
completed=True,
message="Building Records are listed",
@@ -82,48 +82,44 @@ class BuildCreateEventMethods(MethodToEvent):
)
created_build = Build.create_action(data=data, token=token_dict)
if not created_build.is_found:
build_type = BuildTypes.filter_by_one(type_code="APT_YNT", *BuildTypes.valid_record_dict).data
if not build_type:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Build type APT_YNT is not found. Please contact with your system administrator.",
)
api_enum = ApiEnumDropdown.filter_by_one(
enum_class="Directions", key="NN"
).data
if not api_enum:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Api Enum NN is not found. Please contact with your system administrator.",
)
build_parts = dict(
address_gov_code=f"{data.gov_address_code}-M",
build_id=int(created_build.id),
build_uu_id=str(created_build.uu_id),
part_no="0",
part_type_id=int(build_type.id),
part_type_uu_id=str(build_type.uu_id),
part_direction_id=int(api_enum.id),
part_direction_uu_id=str(api_enum.uu_id),
part_code="MAN-ROOM",
human_livable=False,
is_confirmed=True,
build_type = BuildTypes.filter_by_one(
type_code="APT_YNT", *BuildTypes.valid_record_dict
).data
if not build_type:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Build type APT_YNT is not found. Please contact with your system administrator.",
)
man_build_part = BuildParts.find_or_create(**build_parts)
created_build.update(management_room_id=man_build_part.id)
BuildParts.save()
return JSONResponse(
content={
"completed": True,
"message": "Create Build record completed. This build is assigned to you.",
"data": created_build.get_dict(),
},
status_code=status.HTTP_200_OK,
api_enum = ApiEnumDropdown.filter_by_one(enum_class="Directions", key="NN").data
if not api_enum:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Api Enum NN is not found. Please contact with your system administrator.",
)
raise HTTPException(
status_code=status.HTTP_406_NOT_ACCEPTABLE,
detail=f"Build record create not successful for Employee UUID : {token_dict.selected_company.employee_uu_id}",
build_parts = dict(
address_gov_code=f"{data.gov_address_code}-M",
build_id=int(created_build.id),
build_uu_id=str(created_build.uu_id),
part_no="0",
part_type_id=int(build_type.id),
part_type_uu_id=str(build_type.uu_id),
part_direction_id=int(api_enum.id),
part_direction_uu_id=str(api_enum.uu_id),
part_code="MAN-ROOM",
human_livable=False,
is_confirmed=True,
)
man_build_part = BuildParts.find_or_create(**build_parts)
created_build.update(management_room_id=man_build_part.id)
BuildParts.save()
return JSONResponse(
content={
"completed": True,
"message": "Create Build record completed. This build is assigned to you.",
"data": created_build.get_dict(),
},
status_code=status.HTTP_200_OK,
)
@classmethod
@@ -132,8 +128,8 @@ class BuildCreateEventMethods(MethodToEvent):
):
records = Addresses.list_via_employee(
token_dict=token_dict, filter_expr=[Addresses.uu_id == data.address_uu_id]
)
if not records.data:
).data
if not records:
raise HTTPException(
status_code=404,
detail=f"This address {data.address_uu_id} is not found in the user's address list.",
@@ -180,20 +176,23 @@ class BuildUpdateEventMethods(MethodToEvent):
Build.pre_query = Build.select_action(
employee_id=token_dict.selected_company.employee_id
)
if Build.filter_all(Build.person_id == token_dict.person_id):
if Build.filter_all(
Build.person_id == token_dict.person_id,
*Build.valid_record_args(Build),
).data:
Build.pre_query = None
if updated_build := Build.update_action(
updated_build = Build.update_action(
data=data, token=token_dict, build_uu_id=build_uu_id
):
Build.save()
return JSONResponse(
content={
"completed": True,
"message": "Update Build record",
"data": updated_build,
},
status_code=status.HTTP_200_OK,
)
)
Build.save()
return JSONResponse(
content={
"completed": True,
"message": "Update Build record",
"data": updated_build,
},
status_code=status.HTTP_200_OK,
)
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=f"This user can not modify {build_uu_id} - building.",

View File

@@ -35,10 +35,12 @@ class BuildingBuildPartsListEventMethods(MethodToEvent):
)
build_list_ids = [build.id for build in build_list_query.all()]
BuildParts.pre_query = BuildParts.query.filter(
BuildParts.build_id.in_(build_list_ids)
BuildParts.build_id.in_(build_list_ids),
*BuildParts.valid_record_args(BuildParts),
)
records = BuildParts.filter_active(
*BuildParts.get_smart_query(list_options.query)
*BuildParts.get_smart_query(list_options.query),
*BuildParts.valid_record_args(BuildParts),
)
return AlchemyJsonResponse(
completed=True,
@@ -61,15 +63,6 @@ class BuildingBuildPartsCreateEventMethods(MethodToEvent):
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
):
created_build = BuildParts.create_action(data=data, token=token_dict)
if not created_build:
return JSONResponse(
content={
"completed": False,
"message": "Create Build Parts is not completed",
"data": {},
},
status_code=status.HTTP_406_NOT_ACCEPTABLE,
)
created_build.save()
return JSONResponse(
content={
@@ -94,21 +87,13 @@ class BuildingBuildPartsUpdateEventMethods(MethodToEvent):
data: InsertBuildParts,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
):
if updated_build := BuildParts.update_action(data=data, token=token_dict):
updated_build.save()
return JSONResponse(
content={
"completed": True,
"message": "Update Build Parts record",
"data": updated_build,
},
status_code=status.HTTP_200_OK,
)
updated_build = BuildParts.update_action(data=data, token=token_dict)
updated_build.save()
return JSONResponse(
content={
"completed": True,
"message": "Update Build Parts record",
"data": {},
"data": updated_build,
},
status_code=status.HTTP_200_OK,
)
@@ -123,7 +108,10 @@ class BuildingBuildPartsPatchEventMethods(MethodToEvent):
@classmethod
def building_build_parts_patch(cls, data, token_dict):
find_one_build = BuildParts.filter_one(BuildParts.uu_id == data.uu_id).data
find_one_build = BuildParts.filter_one(
BuildParts.uu_id == data.uu_id,
*BuildParts.valid_record_args(BuildParts),
).data
access_authorized_build = BuildParts.select_action(
duty_id=token_dict.selected_company.duty_id,
filter_expr=[BuildParts.id == find_one_build.id],

View File

@@ -37,7 +37,7 @@ class BuildingLivingSpacesPartsListEventMethods(MethodToEvent):
Build.filter_attr = list_options
build_part_id_list_query = BuildParts.filter_all(
BuildParts.build_id.in_([build.id for build in build_id_list_query.all()]),
BuildParts.active == True,
*BuildParts.valid_record_args(BuildParts),
).data
list_options.query.pop("expiry_starts", None)
@@ -47,8 +47,8 @@ class BuildingLivingSpacesPartsListEventMethods(MethodToEvent):
BuildLivingSpace.build_parts_id.in_(
[build_part.id for build_part in build_part_id_list_query]
),
BuildLivingSpace.active == True,
*BuildLivingSpace.get_smart_query(smart_query=list_options.query),
*BuildLivingSpace.valid_record_args(BuildLivingSpace),
)
return AlchemyJsonResponse(
completed=True,
@@ -66,7 +66,7 @@ class BuildingLivingSpacesPartsListEventMethods(MethodToEvent):
Build.filter_attr = list_options
build_part_id_list_query = BuildParts.filter_all(
BuildParts.build_id.in_([build.id for build in build_id_list_query.all()]),
BuildParts.active == True,
*BuildLivingSpace.valid_record_args(BuildLivingSpace),
).data
records = BuildLivingSpace.filter_all(
@@ -74,6 +74,7 @@ class BuildingLivingSpacesPartsListEventMethods(MethodToEvent):
[build_part.id for build_part in build_part_id_list_query]
),
*BuildLivingSpace.get_smart_query(smart_query=list_options.query),
*BuildLivingSpace.valid_record_args(BuildLivingSpace),
).data
return AlchemyJsonResponse(
completed=True,
@@ -96,7 +97,6 @@ class BuildingLivingSpacesPartsCreateEventMethods(MethodToEvent):
token_dict: typing.Union[EmployeeTokenObject, OccupantTokenObject],
):
from api_library.date_time_actions.date_functions import system_arrow
from sqlalchemy.sql import select
data_dict = data.dump()
build_id_list_query = Build.select_action(
@@ -105,6 +105,7 @@ class BuildingLivingSpacesPartsCreateEventMethods(MethodToEvent):
build_part = BuildParts.filter_one(
BuildParts.uu_id == data.build_parts_uu_id,
BuildParts.build_id.in_([build.id for build in build_id_list_query.all()]),
*BuildLivingSpace.valid_record_args(BuildLivingSpace),
).data
if not build_part:
raise HTTPException(
@@ -112,7 +113,10 @@ class BuildingLivingSpacesPartsCreateEventMethods(MethodToEvent):
detail=f"{data.build_parts_uu_id} - Build Part is not found in database. Check build part uu_id",
)
life_person = People.filter_one(People.uu_id == data.person_uu_id or "").data
life_person = People.filter_one(
People.uu_id == data.person_uu_id or "",
*People.valid_record_args(People),
).data
if not life_person:
raise HTTPException(
status_code=status.HTTP_418_IM_A_TEAPOT,
@@ -139,17 +143,17 @@ class BuildingLivingSpacesPartsCreateEventMethods(MethodToEvent):
BuildLivingSpace.build_parts_id == build_part.id,
BuildLivingSpace.person_id == life_person.id,
BuildLivingSpace.occupant_type == occupant_type.id,
BuildLivingSpace.active == True,
BuildLivingSpace.is_confirmed == True,
str(system_arrow.now()) < BuildLivingSpace.expiry_ends,
str(system_arrow.now()) >= BuildLivingSpace.expiry_starts,
*BuildLivingSpace.valid_record_args(BuildLivingSpace),
# str(system_arrow.now()) < BuildLivingSpace.expiry_ends,
# str(system_arrow.now()) >= BuildLivingSpace.expiry_starts,
select_args=[BuildLivingSpace.id],
order_by=BuildLivingSpace.expiry_starts.desc(),
limit=1,
).data
last_living_space = BuildLivingSpace.filter_one(
BuildLivingSpace.id == living_space_id[0] if living_space_id else None
BuildLivingSpace.id == living_space_id[0] if living_space_id else None,
*BuildLivingSpace.valid_record_args(BuildLivingSpace),
)
data_dict["expiry_starts"] = str(system_arrow.now())
@@ -183,7 +187,6 @@ class BuildingLivingSpacesPartsUpdateEventMethods(MethodToEvent):
@classmethod
def building_live_space_update(cls, build_uu_id: str, data, token_dict):
from api_library.date_time_actions.date_functions import system_arrow
from sqlalchemy.sql import select
data_dict = data.dump()
build_id_list_query = Build.select_action(
@@ -192,7 +195,7 @@ class BuildingLivingSpacesPartsUpdateEventMethods(MethodToEvent):
build_part = BuildParts.filter_one(
BuildParts.uu_id == data.build_parts_uu_id,
BuildParts.build_id.in_([build.id for build in build_id_list_query.all()]),
BuildParts.active == True,
*BuildParts.valid_record_args(BuildParts),
).data
if not build_part:
raise HTTPException(
@@ -211,13 +214,15 @@ class BuildingLivingSpacesPartsUpdateEventMethods(MethodToEvent):
)
living_space_id = BuildLivingSpace.select_only(
*BuildLivingSpace.valid_record_args(BuildLivingSpace),
select_args=[BuildLivingSpace.id],
order_by=BuildLivingSpace.expiry_starts.desc(),
limit=1,
).get(1)
last_living_space = BuildLivingSpace.filter_one(
BuildLivingSpace.id == living_space_id if living_space_id else None
BuildLivingSpace.id == living_space_id if living_space_id else None,
*BuildLivingSpace.valid_record_args(BuildLivingSpace),
).data
data_dict["expiry_starts"] = str(system_arrow.now())