project budget updated

This commit is contained in:
berkay 2024-11-20 12:04:02 +03:00
parent 48682b1914
commit 0b3e0c299c
26 changed files with 742 additions and 310 deletions

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,30 @@
GSM Projesi 30.11.2023 -315,00 TL
GSM Projesi 31.12.2023 -300,00 TL
Doğalgaz_Anakolon Projesi 31.10.2023 -1.733,33 TL
Doğalgaz_Anakolon Projesi 30.11.2023 -1.750,00 TL
Doğalgaz_Anakolon Projesi 31.12.2023 -1.100,00 TL
Yan Alan Projesi 31.10.2023 -495,83 TL
Yan Alan Projesi 30.11.2023 -400,00 TL
Kazan çıkışı ana boru değişim projesi 29.02.2024 -180,00 TL
Kazan çıkışı ana boru değişim projesi 31.03.2024 -150,00 TL
Kazan Genleşme Tankı değişim projesi 30.04.2024 -250,00 TL
Kazan Genleşme Tankı değişim projesi 31.05.2024 -300,00 TL
2024 1 nolu proje toplamı 31.07.2024 -585
1 - Bina boru satışı -₺1.580,00
3 - Bina su depo temizliği projesi ₺3.000,00
4 - Çatı Camlarının değişim projesi ₺1.000,00
8 - Bina Uydu Bakım Projesi ₺1.700,00
2 - Bina iç tadilat, elektrik ve boya işleri projesi ₺42.200,00
5 - Dış kapının değişim projesi ₺24.000,00
9- Hurda Aliminyum Satışı -₺2.600,00
6 - Kazan borlularının ana kolondan sökülmesi projesi ₺22.500,00
7 - Yol tarafı ile bahçe tarafı logar tadilat projesi ₺0,00
16.09.2024 10:28 -2.000,00 6.327,91 0 TL dogalgaz bakimi icin
20.08.2024 13:53 -8.000,00 257,70 0 TL tadilat bedeli
15.07.2024 11:52 -500,00 7.104,23 0 TL REMZİ SU
13.07.2024 10:35 -2.400,00 6.104,23 0 TL SANTIYE TEKNIK ANKARA 0412
13.06.2024 13:37 -750,00 16.939,09 0 TL cam değişimi
12.06.2024 10:41 -3.000,00 16.701,74 0 TL depo temizliği için ödenen
10.06.2024 13:38 -200,00 19.701,74 0 TL cam için ödenen

View File

@ -3,6 +3,9 @@ import typing
from fastapi import status, HTTPException
from fastapi.responses import JSONResponse
from api_events.events.events.events_bind_services import (
ServiceBindOccupantEventMethods,
)
from databases import (
Build,
BuildParts,
@ -28,6 +31,7 @@ from api_validations.validations_request import (
ListOptions,
ListDecisionBook,
)
from databases.sql_models.event.event import Services
class DecisionBookDecisionBookItemsListEventMethods(MethodToEvent):
@ -178,7 +182,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
BuildParts.human_livable == True,
BuildParts.build_id == build_id,
)
print('data_info_type.key', data_info_type.key)
print("data_info_type.key", data_info_type.key)
book_payment_dict = dict(
payment_plan_time_periods=str(data_info_type.key),
build_decision_book_item_id=decision_book_item.id,
@ -228,12 +232,10 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
BuildDecisionBookProjects.build_decision_book_id == decision_book.id,
BuildDecisionBookProjects.project_type
== f"{decision_book.decision_type}_{data_info_type.key}",
system=True
system=True,
)
management_room = BuildParts.filter_one(
BuildParts.build_id == build_id,
BuildParts.part_no == 0,
system=True
BuildParts.build_id == build_id, BuildParts.part_no == 0, system=True
).data
occupant_man = OccupantTypes.filter_by_one(
system=True, occupant_code="MT-VPR", occupant_category_type="MT"
@ -254,7 +256,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
project_start_date=str(local_date),
project_stop_date=str(end_date),
project_type=f"{decision_book.decision_type}_{data_info_type.key}",
project_note=f"Fill later",
project_note=str(decision_book_item.item_comment),
build_decision_book_id=decision_book.id,
build_decision_book_uu_id=str(decision_book.uu_id),
build_decision_book_item_id=decision_book_item.id,
@ -265,23 +267,55 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
book_project_created = BuildDecisionBookProjects.find_or_create(
**book_project_dict
)
print('book_project_created', book_project_created)
book_project_created.save_and_confirm()
print("book_project_created", book_project_created)
item_comment_at_database = decision_book_item.item_comment
decision_book_item.update(
item_comment=f"{book_project_created.project_no}_{book_project_created.project_name} "
f"is assigned to {occupant_man.occupant_description}"
f"is assigned to {occupant_man.occupant_description} | {item_comment_at_database}"
)
decision_book_item.save_and_confirm()
project_lead = OccupantTypes.filter_by_one(
system=True, occupant_code="PRJ-LDR", occupant_category_type="PRJ"
).data
build_new_president = OccupantTypes.filter_by_one(
system=True, occupant_code="MT-VPR", occupant_category_type="MT"
).data
new_president = BuildLivingSpace.filter_one(
BuildLivingSpace.occupant_type == build_new_president.id,
BuildLivingSpace.build_parts_id == management_room.id,
).data
project_leader = BuildLivingSpace.filter_one(
BuildLivingSpace.occupant_type == project_lead.id,
BuildLivingSpace.build_parts_id == management_room.id,
BuildLivingSpace.person_id == new_president.person_id,
).data
if not project_leader:
project_leader = BuildLivingSpace.find_or_create(
person_id=new_president.person_id,
person_uu_id=str(new_president.person_uu_id),
build_parts_id=management_room.id,
build_parts_uu_id=str(management_room.uu_id),
occupant_type=project_lead.id,
occupant_type_uu_id=str(project_lead.uu_id),
)
project_leader.save_and_confirm()
related_service = Services.filter_by_one(
system=True,
related_responsibility=project_lead.occupant_code,
).data
ServiceBindOccupantEventMethods.bind_services_occupant_system(
service_id=related_service.id,
build_living_space_id=project_leader.id,
)
project_person = BuildDecisionBookProjectPerson.find_or_create(
build_decision_book_project_id=book_project_created.id,
build_decision_book_project_uu_id=str(book_project_created.uu_id),
living_space_id=manager_living_space.id,
living_space_uu_id=str(manager_living_space.uu_id),
project_team_type_id=project_lead.id,
project_team_type_uu_id=str(project_lead.uu_id),
living_space_id=project_leader.id,
living_space_uu_id=str(project_leader.uu_id),
)
project_person.save_and_confirm()
return book_project_created
@ -332,7 +366,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
book_items = BuildDecisionBookItems.filter_all(
BuildDecisionBookItems.build_decision_book_id == decision_book.id,
system=True
system=True,
)
if int(book_items.count) < 3:
BuildDecisionBookItems.check_meeting_is_valid_to_start_add_attendance(
@ -342,7 +376,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
book_items = BuildDecisionBookItems.filter_all(
BuildDecisionBookItems.build_decision_book_id == decision_book.id,
system=True
system=True,
)
data_dict["item_order"] = int(book_items.count) + 1
@ -350,7 +384,9 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
data_dict["build_decision_book_uu_id"] = str(decision_book.uu_id)
data_info_type = ApiEnumDropdown.filter_by_one(
system=True, enum_class="BuildDuesTypes", key="BDT-I",
system=True,
enum_class="BuildDuesTypes",
key="BDT-I",
).data
data_info_types = ApiEnumDropdown.due_type_search()
for info_type in data_info_types:
@ -359,8 +395,14 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
break
row_is_debit = str(data_info_type.key).upper() in ["BDT-A", "BDT-D"]
row_is_project = str(data_info_type.key).upper() in ["BDT-R", "BDT-L", "BDT-S"]
debit_dates_required = not data_dict["debit_start_date"] or not data_dict["debit_end_date"]
row_is_project = str(data_info_type.key).upper() in [
"BDT-R",
"BDT-L",
"BDT-S",
]
debit_dates_required = (
not data_dict["debit_start_date"] or not data_dict["debit_end_date"]
)
if row_is_project and debit_dates_required:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
@ -370,7 +412,9 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
data_dict["info_type_id"] = data_info_type.id
data_dict["info_type_uu_id"] = str(data_info_type.uu_id)
unit_price, unit_type = float(data_dict["unit_price"]), str(data_dict["unit_type"])
unit_price, unit_type = float(data_dict["unit_price"]), str(
data_dict["unit_type"]
)
debit_start_date, debit_end_date = (
data_dict["debit_start_date"],
@ -389,7 +433,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
new_decision_book_item = BuildDecisionBookItems.find_or_create(**data_dict)
new_decision_book_item.save_and_confirm()
print('new_decision_book_item', new_decision_book_item)
print("new_decision_book_item", new_decision_book_item)
if created_payment_records_dict := cls.create_payment_records_for_each_build_part(
data_info_type=data_info_type,
build_id=decision_book.build_id,
@ -420,7 +464,9 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
new_decision_book_item.update(is_payment_created=True)
elif row_is_project:
project_no = str(created_payment_records_dict.project_no)
item_comment = f"{data.item_comment} | @ Project is created no : {project_no}."
item_comment = (
f"{data.item_comment} | @ Project is created no : {project_no}."
)
new_decision_book_item.update(item_comment=item_comment)
new_decision_book_item.update(is_payment_created=True)
new_decision_book_item.save_and_confirm()

View File

@ -70,9 +70,7 @@ class DecisionBookPersonAddEventMethods(MethodToEvent):
detail=f"No Decision Book is match with given UUID {data.build_decision_book_uu_id}",
)
manager_occupant_type = OccupantTypes.filter_by_one(
system=True,
occupant_code="BU-MNG",
occupant_category_type="BU"
system=True, occupant_code="BU-MNG", occupant_category_type="BU"
).data
if (
not manager_occupant_type.uu_id
@ -263,7 +261,8 @@ class DecisionBookPersonAssignOccupantEventMethods(MethodToEvent):
)
assign_occupant_type = OccupantTypes.filter_by_one(
system=True, uu_id=data.occupant_type_uu_id,
system=True,
uu_id=data.occupant_type_uu_id,
).data
if not assign_occupant_type:
raise HTTPException(

View File

@ -96,7 +96,9 @@ class BuildDecisionBookInvitationsCreateEventMethods(MethodToEvent):
)
# Create an invitation for specific invitation type to start invite sending process
planned_date_expires = str(system_arrow.get(data.planned_date).shift(days=15).date())
planned_date_expires = str(
system_arrow.get(data.planned_date).shift(days=15).date()
)
book_invitation = BuildDecisionBookInvitations.find_or_create(
build_id=token_dict.selected_occupant.build_id,
build_uu_id=token_dict.selected_occupant.build_uuid,
@ -199,7 +201,8 @@ class BuildDecisionBookInvitationsCreateEventMethods(MethodToEvent):
BuildDecisionBookPerson.invite_id == book_invitation.id,
BuildDecisionBookPerson.build_living_space_id.in_(
[
manager_living_space.id for manager_living_space in manager_living_spaces.data
manager_living_space.id
for manager_living_space in manager_living_spaces.data
]
),
system=True,

View File

@ -5,7 +5,7 @@ from databases import (
BuildDecisionBookProjects,
BuildDecisionBookProjectPerson,
BuildDecisionBookPayments,
OccupantTypes
OccupantTypes,
)
from api_events.events.abstract_class import MethodToEvent, ActionsSchema
@ -17,13 +17,12 @@ from api_validations.validations_request import (
ListOptions,
)
from api_validations.core_response import AlchemyJsonResponse
from databases import (
Build,
BuildLivingSpace,
BuildParts,
ApiEnumDropdown
from databases import Build, BuildLivingSpace, BuildParts, ApiEnumDropdown
from databases.sql_models.building.decision_book import (
BuildDecisionBookProjectItems,
BuildDecisionBookItems,
BuildDecisionBook,
)
from databases.sql_models.building.decision_book import BuildDecisionBookProjectItems, BuildDecisionBookItems
class ProjectDecisionBookListEventMethods(MethodToEvent):
@ -31,29 +30,37 @@ class ProjectDecisionBookListEventMethods(MethodToEvent):
event_type = "LIST"
__event_keys__ = {
"96459b36-37f2-4d5b-8370-c459058d5bce": "project_decision_book_person_list",
"96459b36-37f2-4d5b-8370-c459058d5bce": "project_decision_book_list",
}
@classmethod
def project_decision_book_person_list(
cls,
data: ListOptions,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
def project_decision_book_list(
cls,
list_options: ListOptions,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
):
if isinstance(token_dict, EmployeeTokenObject):
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED",
message="Employee cannot create project project decision book",
data={}
data={},
)
elif isinstance(token_dict, OccupantTokenObject):
project_person = BuildDecisionBookProjectPerson.filter_all(
BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id,
)
decision_book_ids = [_.build_decision_book_project_id for _ in project_person.data]
build_decision_book = BuildDecisionBook.filter_one(
BuildDecisionBook.build_id == token_dict.selected_occupant.build_id,
).data
if not build_decision_book:
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND",
message="Build decision book not found",
data={},
)
BuildDecisionBookProjects.filter_attr = list_options
decision_book_projects = BuildDecisionBookProjects.filter_all(
BuildDecisionBookProjects.build_decision_book_project_id.in_(decision_book_ids),
BuildDecisionBookProjects.build_decision_book_id
== build_decision_book.id,
)
return AlchemyJsonResponse(
status_code="HTTP_200_OK",
@ -72,44 +79,44 @@ class ProjectDecisionBookCreateEventMethods(MethodToEvent):
@classmethod
def project_decision_book_create(
cls,
data: InsertBuildDecisionBookProjects,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
cls,
data: InsertBuildDecisionBookProjects,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
):
if isinstance(token_dict, EmployeeTokenObject):
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED",
message="Employee cannot create project project decision book",
data={}
data={},
)
elif isinstance(token_dict, OccupantTokenObject):
living_space = BuildLivingSpace.filter_one(
BuildLivingSpace.living_space_id == token_dict.selected_occupant.living_space_id,
BuildLivingSpace.id == token_dict.selected_occupant.living_space_id,
).data
if not living_space:
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND",
message="Living space not found",
data={}
data={},
)
occupant_type = OccupantTypes.filter_by_one(
occupant_category_type="PRJ",
occupant_code="PRJ-LDR",
id=living_space.occupant_type
id=living_space.occupant_type,
).data
if not occupant_type:
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND",
message=f"{token_dict.selected_occupant.occupant_type_uu_id} occupant type is not allowed, only PRJ-LDR occupant type is allowed",
data={}
data={},
)
decision_book_project_person = BuildDecisionBookProjectPerson.filter_one(
BuildDecisionBookProjectPerson.build_decision_book_project_uu_id == data.get("build_decision_book_uu_id"),
BuildDecisionBookProjectPerson.living_space_id == token_dict.selected_occupant.living_space_id,
BuildDecisionBookProjectPerson.living_space_id
== token_dict.selected_occupant.living_space_id,
)
return AlchemyJsonResponse(
status_code="HTTP_200_OK",
@ -128,62 +135,65 @@ class ProjectDecisionBookUpdateEventMethods(MethodToEvent):
@classmethod
def project_decision_book_update(
cls,
data: UpdateBuildDecisionBookProjects,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
cls,
data: UpdateBuildDecisionBookProjects,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
):
if isinstance(token_dict, EmployeeTokenObject):
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED",
message="Employee cannot create project project decision book",
data={}
data={},
)
elif isinstance(token_dict, OccupantTokenObject):
living_space = BuildLivingSpace.filter_one(
BuildLivingSpace.living_space_id == token_dict.selected_occupant.living_space_id,
BuildLivingSpace.id == token_dict.selected_occupant.living_space_id,
).data
if not living_space:
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND",
message="Living space not found",
data={}
data={},
)
occupant_type = OccupantTypes.filter_by_one(
occupant_category_type="PRJ",
occupant_code="PRJ-LDR",
id=living_space.occupant_type
id=living_space.occupant_type,
).data
if not occupant_type:
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND",
message=f"{token_dict.selected_occupant.occupant_type_uu_id} occupant type is not allowed, only PRJ-LDR occupant type is allowed",
data={}
data={},
)
decision_book_project_person = BuildDecisionBookProjectPerson.filter_one(
BuildDecisionBookProjects.build_decision_book_project_uu_id == data.get("build_decision_book_project_uu_id"),
BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id,
BuildDecisionBookProjects.build_decision_book_project_uu_id
== data.get("build_decision_book_project_uu_id"),
BuildDecisionBookProjects.living_space_id
== token_dict.selected_occupant.living_space_id,
).data
if not decision_book_project_person:
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND",
message="This project is not allowed for this occupant",
data={}
data={},
)
decision_book_project = BuildDecisionBookProjects.filter_one(
BuildDecisionBookProjects.id == decision_book_project_person.build_decision_book_project_id,
BuildDecisionBookProjects.id
== decision_book_project_person.build_decision_book_project_id,
)
if decision_book_project.is_completed:
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED",
message="Project decision book is closed. No modification is allowed",
data={}
data={},
)
data_dict = data.excluded_dump()
decision_book_project.update(**data_dict)
@ -204,66 +214,68 @@ class ProjectDecisionBookApprovalEventMethods(MethodToEvent):
@classmethod
def project_decision_book_approval(
cls,
data: ApprovalsBuildDecisionBookProjects,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
cls,
data: ApprovalsBuildDecisionBookProjects,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
):
if isinstance(token_dict, EmployeeTokenObject):
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED",
message="Employee cannot create project project decision book",
data={}
data={},
)
elif isinstance(token_dict, OccupantTokenObject):
living_space = BuildLivingSpace.filter_one(
BuildLivingSpace.living_space_id == token_dict.selected_occupant.living_space_id,
BuildLivingSpace.id == token_dict.selected_occupant.living_space_id,
).data
if not living_space:
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND",
message="Living space not found",
data={}
data={},
)
occupant_type = OccupantTypes.filter_by_one(
occupant_category_type="PRJ",
occupant_code="PRJ-LDR",
id=living_space.occupant_type
id=living_space.occupant_type,
).data
if not occupant_type:
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND",
message=f"{token_dict.selected_occupant.occupant_type_uu_id} occupant type is not allowed, only PRJ-LDR occupant type is allowed",
data={}
data={},
)
decision_book_project_person = BuildDecisionBookProjectPerson.filter_one(
BuildDecisionBookProjects.build_decision_book_project_uu_id == data.get(
"build_decision_book_project_uu_id"),
BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id,
BuildDecisionBookProjects.build_decision_book_project_uu_id
== data.get("build_decision_book_project_uu_id"),
BuildDecisionBookProjects.living_space_id
== token_dict.selected_occupant.living_space_id,
).data
if not decision_book_project_person:
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND",
message="This project is not allowed for this occupant",
data={}
data={},
)
decision_book_project = BuildDecisionBookProjects.filter_one(
BuildDecisionBookProjects.id == decision_book_project_person.build_decision_book_project_id,
BuildDecisionBookProjects.id
== decision_book_project_person.build_decision_book_project_id,
).data
if decision_book_project.is_completed:
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED",
message="Project decision book is closed. No modification is allowed",
data={}
data={},
)
data_dict = data.excluded_dump()
data_dict["is_completed"] = True
data_dict["status_id"] = 1 # is completed status
data_dict["status_id"] = 1 # is completed status
build_parts_list = BuildParts.filter_all(
BuildParts.human_livable == True,
@ -271,7 +283,8 @@ class ProjectDecisionBookApprovalEventMethods(MethodToEvent):
).data
decision_book_project_item = BuildDecisionBookItems.filter_one(
BuildDecisionBookItems.id == decision_book_project.build_decision_book_item_id
BuildDecisionBookItems.id
== decision_book_project.build_decision_book_item_id
).data
book_payment_dict = dict(
@ -283,7 +296,9 @@ class ProjectDecisionBookApprovalEventMethods(MethodToEvent):
payment_type = ApiEnumDropdown.get_debit_search(search_debit="DT-D")
for final_price in data.final_price_list:
for build_part_single in build_parts_list:
local_date = BuildDecisionBookPayments.client_arrow.get(str(final_price["date"]))
local_date = BuildDecisionBookPayments.client_arrow.get(
str(final_price["date"])
)
local_date = system_arrow.get(local_date)
payment_amount = abs(float(final_price["price"])) * -1
created_book_payment = BuildDecisionBookPayments.find_or_create(
@ -320,36 +335,25 @@ class ProjectDecisionBookPatchEventMethods(MethodToEvent):
@classmethod
def project_decision_book_patch(
cls,
data,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
cls,
data,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
):
return
ProjectDecisionBookListEventMethod = (
ProjectDecisionBookListEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/person/list")
)
ProjectDecisionBookListEventMethod = ProjectDecisionBookListEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/list")
)
ProjectDecisionBookCreateEventMethod = (
ProjectDecisionBookCreateEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/create")
)
ProjectDecisionBookCreateEventMethod = ProjectDecisionBookCreateEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/create")
)
ProjectDecisionBookUpdateEventMethod = (
ProjectDecisionBookUpdateEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/update")
)
ProjectDecisionBookUpdateEventMethod = ProjectDecisionBookUpdateEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/update")
)
ProjectDecisionBookApprovalEventMethod = (
ProjectDecisionBookApprovalEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/approval")
)
ProjectDecisionBookApprovalEventMethod = ProjectDecisionBookApprovalEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/approval")
)
ProjectDecisionBookPatchEventMethod = (
ProjectDecisionBookPatchEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/patch")
)
ProjectDecisionBookPatchEventMethod = ProjectDecisionBookPatchEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/patch")
)

View File

@ -76,7 +76,7 @@ class BuildDecisionBookProjectItemsUpdateEventMethods(MethodToEvent):
status_code="HTTP_403_FORBIDDEN",
error_case="UNAUTHORIZED",
message=f"No permission to update decision book project items",
data={}
data={},
)

View File

@ -26,28 +26,33 @@ class ProjectDecisionBookPersonListEventMethods(MethodToEvent):
@classmethod
def project_decision_book_person_list(
cls,
data: ListOptions,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
cls,
list_options: ListOptions,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
):
if isinstance(token_dict, EmployeeTokenObject):
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED",
message="Employee cannot create project project decision book",
data={}
data={},
)
elif isinstance(token_dict, OccupantTokenObject):
project_person = BuildDecisionBookProjectPerson.filter_all(
BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id,
BuildDecisionBookProjects.living_space_id
== token_dict.selected_occupant.living_space_id,
)
decision_book_ids = [_.build_decision_book_project_id for _ in project_person.data]
decision_book_ids = [
_.build_decision_book_project_id for _ in project_person.data
]
decision_book_projects = BuildDecisionBookProjects.filter_all(
BuildDecisionBookProjects.build_decision_book_project_id.in_(decision_book_ids),
BuildDecisionBookProjects.build_decision_book_project_id.in_(
decision_book_ids
),
)
return AlchemyJsonResponse(
status_code="HTTP_200_OK",
message="Project decision book created successfully",
message="Project decision person book listed successfully",
result=decision_book_projects,
)
@ -62,21 +67,23 @@ class ProjectDecisionBookPersonCreateEventMethods(MethodToEvent):
@classmethod
def project_decision_book_create(
cls,
data: InsertBuildDecisionBookProjectPerson,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
cls,
data: InsertBuildDecisionBookProjectPerson,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
):
if isinstance(token_dict, EmployeeTokenObject):
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED",
message="Employee cannot create project project decision book",
data={}
data={},
)
elif isinstance(token_dict, OccupantTokenObject):
decision_book = BuildDecisionBookProjects.filter_one(
BuildDecisionBookProjects.build_decision_book_uu_id==data.get("build_decision_book_uu_id"),
BuildDecisionBookProjects.project_response_living_space_id==token_dict.selected_occupant.living_space_id,
BuildDecisionBookProjects.build_decision_book_uu_id
== data.get("build_decision_book_uu_id"),
BuildDecisionBookProjects.project_response_living_space_id
== token_dict.selected_occupant.living_space_id,
)
return AlchemyJsonResponse(
status_code="HTTP_200_OK",
@ -95,21 +102,23 @@ class ProjectDecisionBookPersonUpdateEventMethods(MethodToEvent):
@classmethod
def project_decision_book_update(
cls,
data: UpdateBuildDecisionBookProjectPerson,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
cls,
data: UpdateBuildDecisionBookProjectPerson,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
):
if isinstance(token_dict, EmployeeTokenObject):
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED",
message="Employee cannot create project project decision book",
data={}
data={},
)
elif isinstance(token_dict, OccupantTokenObject):
decision_book_project_person = BuildDecisionBookProjectPerson.filter_one(
BuildDecisionBookProjects.build_decision_book_project_uu_id == data.get("build_decision_book_uu_id"),
BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id,
BuildDecisionBookProjects.build_decision_book_project_uu_id
== data.get("build_decision_book_uu_id"),
BuildDecisionBookProjects.living_space_id
== token_dict.selected_occupant.living_space_id,
)
return AlchemyJsonResponse(
@ -129,21 +138,23 @@ class ProjectDecisionBookPersonPatchEventMethods(MethodToEvent):
@classmethod
def project_decision_book_patch(
cls,
data,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
cls,
data,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
):
if isinstance(token_dict, EmployeeTokenObject):
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED",
message="Employee cannot create project project decision book",
data={}
data={},
)
elif isinstance(token_dict, OccupantTokenObject):
decision_book_project_person = BuildDecisionBookProjectPerson.filter_one(
BuildDecisionBookProjects.build_decision_book_project_uu_id == data.get("build_decision_book_uu_id"),
BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id,
BuildDecisionBookProjects.build_decision_book_project_uu_id
== data.get("build_decision_book_uu_id"),
BuildDecisionBookProjects.living_space_id
== token_dict.selected_occupant.living_space_id,
)
return AlchemyJsonResponse(
status_code="HTTP_200_OK",
@ -152,10 +163,8 @@ class ProjectDecisionBookPersonPatchEventMethods(MethodToEvent):
)
ProjectDecisionBookPersonListEventMethod = (
ProjectDecisionBookPersonListEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/people/list")
)
ProjectDecisionBookPersonListEventMethod = ProjectDecisionBookPersonListEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/people/list")
)
ProjectDecisionBookPersonCreateEventMethod = (
ProjectDecisionBookPersonCreateEventMethods(
@ -167,8 +176,6 @@ ProjectDecisionBookPersonUpdateEventMethod = (
action=ActionsSchema(endpoint="/build/decision_book/project/people/update")
)
)
ProjectDecisionBookPersonPatchEventMethod = (
ProjectDecisionBookPersonPatchEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/people/patch")
)
ProjectDecisionBookPersonPatchEventMethod = ProjectDecisionBookPersonPatchEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/people/patch")
)

View File

@ -17,6 +17,15 @@ from api_events.tasks2events.occupant_tasks.meeting_president import (
from api_events.tasks2events.occupant_tasks.meeting_voted_president import (
BuildMeetingVotedPresident,
)
from api_events.tasks2events.occupant_tasks.project_leader import ProjectLeader
from api_events.tasks2events.occupant_tasks.project_finance import (
ProjectFinanceResponsible,
)
from api_events.tasks2events.occupant_tasks.project_employee import ProjectEmployee
from api_events.tasks2events.occupant_tasks.project_technical import ProjectTechnical
from api_events.tasks2events.occupant_tasks.project_responsiable import (
ProjectResponsible,
)
__all__ = [
@ -32,4 +41,9 @@ __all__ = [
"BuildMeetingAdvisor",
"BuildMeetingAttendance",
"BuildMeetingVotedPresident",
"ProjectLeader",
"ProjectFinanceResponsible",
"ProjectEmployee",
"ProjectTechnical",
"ProjectResponsible",
]

View File

@ -9,7 +9,6 @@ class ProjectEmployee(AddEventFunctionality):
{"function_code": "96459b36-37f2-4d5b-8370-c459058d5bce"},
{"function_code": "ce3630e4-2bf9-4433-bdab-1ee72117e54b"},
{"function_code": "b27e4fd0-6e3e-441b-9b33-806ac7082444"},
]
def __new__(cls, *args, **kwargs):

View File

@ -9,7 +9,6 @@ class ProjectFinanceResponsible(AddEventFunctionality):
{"function_code": "ce3630e4-2bf9-4433-bdab-1ee72117e54b"},
{"function_code": "b27e4fd0-6e3e-441b-9b33-806ac7082444"},
{"function_code": "7101b5ca-8bef-40f9-8b4d-646d9994e18f"},
]
def __new__(cls, *args, **kwargs):

View File

@ -15,6 +15,7 @@ class ProjectLeader(AddEventFunctionality):
{"function_code": "7fbd18a0-c099-4494-ada1-bb23e39bb141"},
{"function_code": "a122e84a-5556-4bf7-b680-1f47c438d4f7"},
{"function_code": "7101b5ca-8bef-40f9-8b4d-646d9994e18f"},
{"function_code": "96459b36-37f2-4d5b-8370-c459058d5bce"},
]
def __new__(cls, *args, **kwargs):

View File

@ -43,7 +43,7 @@ class UpdateBuildDecisionBookProjectPerson(PydanticBaseModel):
class InsertBuildDecisionBookProjects(BaseModelRegular):
build_decision_book_item_uu_id: str
project_response_person_uu_id: str
project_responsible_person_uu_id: str
project_name: str
project_start_date: str
project_stop_date: str

View File

@ -6,6 +6,14 @@ from databases.sql_models.account.account import (
AccountCodes,
AccountDetail,
AccountMaster,
AccountRecordDecisionPaymentClosed,
AccountRecordExchanges,
)
from databases.sql_models.building.budget import (
DecisionBookBudgetBooks,
DecisionBookBudgetCodes,
DecisionBookBudgetMaster,
DecisionBookBudgets,
)
from databases.sql_models.account.iban import (
BuildIbans,
@ -100,6 +108,8 @@ __all__ = [
"AccountCodes",
"AccountDetail",
"AccountMaster",
"AccountRecordDecisionPaymentClosed",
"AccountRecordExchanges",
"BuildIbans",
"BuildIbanDescription",
"CrypterEngine",
@ -122,6 +132,10 @@ __all__ = [
"BuildDecisionBookProjectPerson",
"BuildDecisionBookPersonOccupants",
"BuildDecisionBookProjectItems",
"DecisionBookBudgetBooks",
"DecisionBookBudgetCodes",
"DecisionBookBudgetMaster",
"DecisionBookBudgets",
"Companies",
"RelationshipDutyCompany",
"Employees",

View File

@ -650,3 +650,99 @@ class AccountRecords(CrudCollection):
# )
# )
# print("is all dues_type", payment_dict["dues_type"], paid_value)
class AccountRecordDecisionPaymentClosed(CrudCollection):
__tablename__ = "account_record_decision_payment_closed"
__exclude__fields__ = []
arc_currency: Mapped[str] = mapped_column(
String(5), nullable=False, comment="Unit of Currency"
)
arc_processing_time: Mapped[TIMESTAMP] = mapped_column(
TIMESTAMP, nullable=False, comment="Processing Time"
)
arc_currency_value: Mapped[float] = mapped_column(
Numeric(20, 6), nullable=False, comment="Currency Value"
)
decision_book_budgets_id: Mapped[int] = mapped_column(
ForeignKey("decision_book_budgets.id"), nullable=True
)
decision_book_budgets_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Budget UUID"
)
build_decision_book_payment_id: Mapped[int] = mapped_column(
ForeignKey("build_decision_book_payments.id")
)
build_decision_book_payment_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Build Decision Book Payment UU ID"
)
account_records_id: Mapped[int] = mapped_column(ForeignKey("account_records.id"))
account_records_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Account Record UU ID"
)
__table_args__ = (
Index(
"_account_record_decision_payment_closed_ndx_00",
account_records_id,
build_decision_book_payment_id,
arc_processing_time,
),
Index(
"_account_record_decision_payment_closed_ndx_01",
build_decision_book_payment_id,
account_records_id,
arc_processing_time,
),
{"comment": "Account Record Decision Payment Closed Information"},
)
class AccountRecordExchanges(CrudCollection):
__tablename__ = "account_record_exchanges"
__exclude__fields__ = []
are_currency: Mapped[str] = mapped_column(
String(5), nullable=False, comment="Unit of Currency"
)
are_exchange_rate: Mapped[float] = mapped_column(
Numeric(18, 6), nullable=False, server_default="1"
)
usd_exchange_rate_value: Mapped[float] = mapped_column(
Numeric(18, 6),
nullable=True,
server_default="0",
comment="It will be written by multiplying the usd exchange rate with the current value result.",
)
eur_exchange_rate_value: Mapped[float] = mapped_column(
Numeric(18, 6),
nullable=True,
server_default="0",
comment="It will be written by multiplying the eur exchange rate with the current value result.",
)
gbp_exchange_rate_value: Mapped[float] = mapped_column(
Numeric(18, 6),
nullable=True,
server_default="0",
comment="It will be written by multiplying the gpd exchange rate with the current value result.",
)
cny_exchange_rate_value: Mapped[float] = mapped_column(
Numeric(18, 6),
nullable=True,
server_default="0",
comment="It will be written by multiplying the cny exchange rate with the current value result.",
)
account_records_id: Mapped[int] = mapped_column(ForeignKey("account_records.id"))
account_records_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Account Record UU ID"
)
__table_args__ = (
Index("_account_record_exchanges_ndx_00", account_records_id),
{"comment": "Account Record Exchanges Information"},
)

View File

@ -0,0 +1,157 @@
from sqlalchemy import (
String,
ForeignKey,
Index,
SmallInteger,
Boolean,
TIMESTAMP,
Text,
Numeric,
Integer,
)
from sqlalchemy.orm import mapped_column, Mapped, relationship
from databases.sql_models.core_mixin import CrudCollection
class DecisionBookBudgetBooks(CrudCollection):
__tablename__ = "decision_book_budget_books"
__exclude__fields__ = []
country: Mapped[str] = mapped_column(String, nullable=False)
branch_type: Mapped[int] = mapped_column(SmallInteger, server_default="0")
company_id: Mapped[int] = mapped_column(ForeignKey("companies.id"), nullable=False)
company_uu_id: Mapped[str] = mapped_column(String, nullable=False)
branch_id: Mapped[int] = mapped_column(ForeignKey("companies.id"), nullable=True)
branch_uu_id: Mapped[str] = mapped_column(
String, comment="Branch UU ID", nullable=True
)
build_decision_book_id: Mapped[int] = mapped_column(
ForeignKey("build_decision_book.id"), nullable=False
)
build_decision_book_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Build Decision Book UU ID"
)
__table_args__ = (
Index(
"_decision_book_budget_companies_book_ndx_00",
company_id,
CrudCollection.created_at,
),
{"comment": "budget Book Information"},
)
class DecisionBookBudgetCodes(CrudCollection):
__tablename__ = "decision_book_budget_codes"
__exclude__fields__ = []
budget_code: Mapped[str] = mapped_column(
String(48), nullable=False, comment="budget Code"
)
comment_line: Mapped[str] = mapped_column(
Text, nullable=False, comment="Comment Line"
)
build_decision_book_id: Mapped[int] = mapped_column(
ForeignKey("build_decision_book.id"), nullable=True
)
build_decision_book_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Build Decision Book UU ID"
)
build_parts_id: Mapped[int] = mapped_column(
ForeignKey("build_parts.id"), nullable=True
)
build_parts_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Build Parts UU ID"
)
company_id: Mapped[int] = mapped_column(ForeignKey("companies.id"), nullable=True)
company_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Company UU ID"
)
__table_args__ = (
Index("_decision_book_budget_codes_ndx_00", budget_code, "created_at"),
Index("_decision_book_budget_codes_ndx_01", company_id, "created_at"),
{"comment": "budget Book Information"},
)
class DecisionBookBudgetMaster(CrudCollection):
__tablename__ = "decision_book_budget_master"
__exclude__fields__ = []
budget_type: Mapped[str] = mapped_column(
String(50), nullable=False
) # Bütçe tipi (örneğin: Operasyonel, Yatırım)
currency: Mapped[str] = mapped_column(
String(8), server_default="TRY"
) # Bütçe para birimi
total_budget: Mapped[float] = mapped_column(
Numeric(10, 2), nullable=False
) # Toplam bütçe
tracking_period_id: Mapped[int] = mapped_column(
ForeignKey("api_enum_dropdown.id"), nullable=True
)
tracking_period_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Part Direction UUID"
)
budget_books_id: Mapped[int] = mapped_column(
Integer, ForeignKey("decision_book_budget_books.id"), nullable=False
)
budget_books_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Budget Books UU ID"
)
department_id: Mapped[int] = mapped_column(
Integer, ForeignKey("departments.id"), nullable=False
) # Departman ile ilişki
department_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Department UU ID"
)
__table_args__ = ({"comment": "budget Book Information"},)
class DecisionBookBudgets(CrudCollection):
__tablename__ = "decision_book_budgets"
__exclude__fields__ = []
process_date: Mapped[TIMESTAMP] = mapped_column(
TIMESTAMP, nullable=False
) # Başlangıç tarihi
budget_codes_id: Mapped[int] = mapped_column(
Integer, ForeignKey("decision_book_budget_codes.id"), nullable=False
)
total_budget: Mapped[float] = mapped_column(
Numeric(10, 2), nullable=False
) # Toplam bütçe
used_budget: Mapped[float] = mapped_column(
Numeric(10, 2), nullable=False, default=0.0
) # Kullanılan bütçe
remaining_budget: Mapped[float] = mapped_column(
Numeric(10, 2), nullable=False, default=0.0
) # Kullanılan bütçe
decision_book_budget_master_id: Mapped[int] = mapped_column(
Integer, ForeignKey("decision_book_budget_master.id"), nullable=False
)
decision_book_budget_master_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Decision Book Budget Master UU ID"
)
__table_args__ = (
Index(
"_decision_book_budgets_ndx_00",
decision_book_budget_master_uu_id,
process_date,
),
{"comment": "budget Book Information"},
)

View File

@ -549,6 +549,7 @@ class BuildLivingSpace(CrudCollection):
occupant_type_uu_id: Mapped[str] = mapped_column(
String, nullable=False, comment="Occupant Type UUID"
)
__table_args__ = (
{"comment": "Living Space inside building parts that are related to people"},
)
@ -574,7 +575,6 @@ class BuildLivingSpace(CrudCollection):
).data
related_service = Services.filter_by_one(
related_responsibility=occupant_type.occupant_code,
**Services.valid_record_dict,
).data
created_living_space.save_and_confirm()

View File

@ -883,14 +883,14 @@ class BuildDecisionBookPayments(CrudCollection):
String, nullable=False, comment="Build Part UUID"
)
budget_records_id: Mapped[int] = mapped_column(ForeignKey("account_records.id"), nullable=True)
budget_records_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Budget UUID"
)
accounting_id: Mapped[int] = mapped_column(ForeignKey("account_detail.id"), nullable=True)
accounting_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Accounting UUID"
)
# budget_records_id: Mapped[int] = mapped_column(ForeignKey("account_records.id"), nullable=True)
# budget_records_uu_id: Mapped[str] = mapped_column(
# String, nullable=True, comment="Budget UUID"
# )
# accounting_id: Mapped[int] = mapped_column(ForeignKey("account_detail.id"), nullable=True)
# accounting_uu_id: Mapped[str] = mapped_column(
# String, nullable=True, comment="Accounting UUID"
# )
# receive_debit_id: Mapped[int] = mapped_column(ForeignKey("api_enum_dropdown.id"), nullable=True)
# receive_debit_uu_id: Mapped[str] = mapped_column(String, nullable=True, comment="Debit UUID")
@ -920,11 +920,6 @@ class BuildDecisionBookPayments(CrudCollection):
process_date,
unique=True,
),
Index(
"build_decision_book_payments_detail_ndx_01",
budget_records_id,
process_date,
),
{"comment": "Payment Details of Decision Book Payments"},
)
@ -1201,13 +1196,6 @@ class BuildDecisionBookProjectPerson(CrudCollection):
String, nullable=True, comment="Living Space UUID"
)
project_team_type_id: Mapped[int] = mapped_column(
ForeignKey("api_enum_dropdown.id"), nullable=True
)
project_team_type_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Management Type UUID"
)
__table_args__ = (
{"comment": "People that are attended to building project meetings."},
)
@ -1245,6 +1233,7 @@ class BuildDecisionBookProjectItems(CrudCollection):
{"comment": "Project Items related to decision taken at building meetings"},
)
#
# class BuildDecisionBookPaymentsMaster(CrudCollection):
# """

View File

@ -50,6 +50,15 @@ from .application.occupants.router import occupant_types_route
from .decision_book.decision_book_invitations.router import (
build_decision_book_invitations,
)
from .decision_book.project_decision_book.router import (
build_decision_book_project_route,
)
from .decision_book.project_decision_book_items.router import (
build_decision_book_project_items_route,
)
from .decision_book.project_decision_book_person.router import (
build_decision_book_project_people_route,
)
__all__ = [
@ -87,4 +96,7 @@ __all__ = [
"build_project_decision_book_person_route",
"endpoint_restriction_route",
"build_decision_book_invitations",
"build_decision_book_project_route",
"build_decision_book_project_items_route",
"build_decision_book_project_people_route",
]

View File

@ -21,7 +21,9 @@ build_decision_book_project_route.include_router(
@build_decision_book_project_route.post(
path="/list", summary="List Active/Delete/Confirm Build Decision Book People"
)
def build_decision_book_project_people_list(request: Request, list_options: ListOptions):
def build_decision_book_project_people_list(
request: Request, list_options: ListOptions
):
token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(list_options=list_options, token_dict=token_dict)
@ -30,7 +32,9 @@ def build_decision_book_project_people_list(request: Request, list_options: List
path="/create",
summary="Create Build Decision Book Project People with given auth levels",
)
def build_decision_book_project_people_create(request: Request, data: InsertBuildDecisionBookProjects):
def build_decision_book_project_people_create(
request: Request, data: InsertBuildDecisionBookProjects
):
token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(data=data, token_dict=token_dict)
@ -39,7 +43,9 @@ def build_decision_book_project_people_create(request: Request, data: InsertBuil
path="/update/{build_decision_book_project_id}",
summary="Add people to Build Decision People Book with given auth levels",
)
def build_decision_book_project_people_update(request: Request, data: UpdateBuildDecisionBookProjects):
def build_decision_book_project_people_update(
request: Request, data: UpdateBuildDecisionBookProjects
):
token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(data=data, token_dict=token_dict)

View File

@ -10,7 +10,8 @@ from api_services.redis.auth_actions.token import parse_token_object_to_dict
build_decision_book_project_items_route = APIRouter(
prefix="/build/decision_book/project/items", tags=["Decision Project Book Project Items"]
prefix="/build/decision_book/project/items",
tags=["Decision Project Book Project Items"],
)
build_decision_book_project_items_route.include_router(
build_decision_book_project_items_route, include_in_schema=True
@ -18,9 +19,12 @@ build_decision_book_project_items_route.include_router(
@build_decision_book_project_items_route.post(
path="/list", summary="List Active/Delete/Confirm Decision Project Book Project Items"
path="/list",
summary="List Active/Delete/Confirm Decision Project Book Project Items",
)
def build_decision_book_project_people_items_list(request: Request, list_options: ListOptions):
def build_decision_book_project_people_items_list(
request: Request, list_options: ListOptions
):
token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(list_options=list_options, token_dict=token_dict)
@ -29,7 +33,9 @@ def build_decision_book_project_people_items_list(request: Request, list_options
path="/create",
summary="Create Build Decision Book Project People with given auth levels",
)
def build_decision_book_project_people_items_create(request: Request, data: InsertBuildDecisionBookProjectItems):
def build_decision_book_project_people_items_create(
request: Request, data: InsertBuildDecisionBookProjectItems
):
token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(data=data, token_dict=token_dict)
@ -39,15 +45,15 @@ def build_decision_book_project_people_items_create(request: Request, data: Inse
summary="Add people to Decision Project Book Project Items with given auth levels",
)
def build_decision_book_project_people_items_update(
request: Request,
build_decision_book_project_item_uu_id: str,
data: UpdateBuildDecisionBookProjectItems
request: Request,
build_decision_book_project_item_uu_id: str,
data: UpdateBuildDecisionBookProjectItems,
):
token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(
data=data,
build_decision_book_project_item_uu_id=build_decision_book_project_item_uu_id,
token_dict=token_dict
token_dict=token_dict,
)
@ -56,11 +62,11 @@ def build_decision_book_project_people_items_update(
summary="Patch people from Decision Project Book Project Items with given auth levels",
)
def build_decision_book_project_people_items_patch(
request: Request, build_decision_book_project_item_uu_id:str, data
request: Request, build_decision_book_project_item_uu_id: str, data
):
token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(
data=data,
build_decision_book_project_item_uu_id=build_decision_book_project_item_uu_id,
token_dict=token_dict
token_dict=token_dict,
)

View File

@ -20,7 +20,9 @@ build_decision_book_project_people_route.include_router(
@build_decision_book_project_people_route.post(
path="/list", summary="List Active/Delete/Confirm Build Decision Book People"
)
def build_decision_book_project_people_list(request: Request, list_options: ListOptions):
def build_decision_book_project_people_list(
request: Request, list_options: ListOptions
):
token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(list_options=list_options, token_dict=token_dict)
@ -29,7 +31,9 @@ def build_decision_book_project_people_list(request: Request, list_options: List
path="/create",
summary="Create Build Decision Book Project People with given auth levels",
)
def build_decision_book_project_people_create(request: Request, data: InsertBuildDecisionBookProjectPerson):
def build_decision_book_project_people_create(
request: Request, data: InsertBuildDecisionBookProjectPerson
):
token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(data=data, token_dict=token_dict)
@ -39,13 +43,15 @@ def build_decision_book_project_people_create(request: Request, data: InsertBuil
summary="Add people to Build Decision People Book with given auth levels",
)
def build_decision_book_project_people_update(
request: Request, build_decision_book_project_person_uu_id:str, data: UpdateBuildDecisionBookProjectPerson
request: Request,
build_decision_book_project_person_uu_id: str,
data: UpdateBuildDecisionBookProjectPerson,
):
token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(
data=data,
build_decision_book_project_person_uu_id=build_decision_book_project_person_uu_id,
token_dict=token_dict
token_dict=token_dict,
)
@ -54,11 +60,13 @@ def build_decision_book_project_people_update(
summary="Patch people from Build Decision Book Project People with given auth levels",
)
def build_decision_book_project_people_patch(
request: Request, build_decision_book_project_person_uu_id:str, data: UpdateBuildDecisionBookProjectPerson
request: Request,
build_decision_book_project_person_uu_id: str,
data: UpdateBuildDecisionBookProjectPerson,
):
token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(
data=data,
build_decision_book_project_person_uu_id=build_decision_book_project_person_uu_id,
token_dict=token_dict
token_dict=token_dict,
)

View File

@ -74,11 +74,7 @@ def init_api_enums_build_types():
created_build_type.save_and_confirm()
insert_enums = [
{
"enum_class": "BuildDuesTypes",
"type_code": "BDT-D",
"type_name": "Debit"
},
{"enum_class": "BuildDuesTypes", "type_code": "BDT-D", "type_name": "Debit"},
{
"enum_class": "BuildDuesTypes",
"type_code": "BDT-A",
@ -217,7 +213,28 @@ def init_api_enums_build_types():
"type_code": "DT-Z",
"type_name": "Zero Balance",
},
{
"enum_class": "TimePeriod",
"type_code": "TP-W",
"type_name": "Weekly",
},
{
"enum_class": "TimePeriod",
"type_code": "TP-M",
"type_name": "Monthly",
},
{
"enum_class": "TimePeriod",
"type_code": "TP-Q",
"type_name": "Quarterly",
},
{
"enum_class": "TimePeriod",
"type_code": "TP-Y",
"type_name": "Yearly",
},
]
for insert_enum in insert_enums:
created_api_enum = ApiEnumDropdown.find_or_create(
enum_class=insert_enum["enum_class"],

View File

@ -245,6 +245,7 @@ def create_modules_and_services_and_actions():
service_name=duty_object.duty_name,
service_description=duty_object.duty_description,
service_code=f"SRE-{duty_object.duty_code}",
related_responsibility=duty_object.duty_code,
)
created_service.save_and_confirm()
@ -255,6 +256,7 @@ def create_modules_and_services_and_actions():
service_name=occupant_type.occupant_type,
service_description=occupant_type.occupant_description,
service_code=f"SRO-{occupant_type.occupant_code}",
related_responsibility=occupant_type.occupant_code,
)
created_service.save_and_confirm()
@ -262,7 +264,6 @@ def create_modules_and_services_and_actions():
create_services_meeting(module_dict=build_module_module_dict)
create_services_building(module_dict=build_module_module_dict)
create_services_flat(module_dict=build_module_module_dict)
Modules.save()
return
#
# super_admin_module_created=None

View File

@ -1,4 +1,3 @@
from api_validations.validations_request import (
InsertBuildDecisionBookProjectItems,
UpdateBuildDecisionBookProjects,
@ -8,7 +7,9 @@ from api_validations.validations_request import (
def generate_update_project_item(**kwargs):
return {
"build_decision_book_project_uu_id": kwargs.get("build_decision_book_project_uu_id", None),
"build_decision_book_project_uu_id": kwargs.get(
"build_decision_book_project_uu_id", None
),
"is_out_sourced": kwargs.get("is_out_sourced", False),
"project_note": kwargs.get("project_note", None),
# "decision_book_pdf_path": str(kwargs.get("decision_book_pdf_path", None)),
@ -24,7 +25,9 @@ def generate_update_project_item(**kwargs):
def generate_approval_project_item(**kwargs):
return {
"build_decision_book_project_uu_id": kwargs.get("build_decision_book_project_uu_id", None),
"build_decision_book_project_uu_id": kwargs.get(
"build_decision_book_project_uu_id", None
),
"final_price_list": kwargs.get("final_price_list", []),
"project_stop_date": kwargs.get("project_stop_date", None),
}
@ -32,7 +35,9 @@ def generate_approval_project_item(**kwargs):
def generate_insert_project_item(**kwargs):
return {
"build_decision_book_project_uu_id": kwargs.get("build_decision_book_project_uu_id", None),
"build_decision_book_project_uu_id": kwargs.get(
"build_decision_book_project_uu_id", None
),
"item_header": kwargs.get("item_header", ""),
"item_comment": kwargs.get("item_comment", ""),
}
@ -40,8 +45,7 @@ def generate_insert_project_item(**kwargs):
def create_decision_book_items(requester, insert_project_item):
response = requester.post(
endpoint="/build/decision_book/project/items/create",
data=insert_project_item
endpoint="/build/decision_book/project/items/create", data=insert_project_item
)
print("text", response.text)
print("json", response.json())
@ -50,8 +54,7 @@ def create_decision_book_items(requester, insert_project_item):
def update_decision_book_project(requester, update_project_item):
response = requester.post(
endpoint="/build/decision_book/project/update",
data=update_project_item
endpoint="/build/decision_book/project/update", data=update_project_item
)
print("text", response.text)
print("json", response.json())
@ -59,8 +62,7 @@ def update_decision_book_project(requester, update_project_item):
def approve_build_decision_book_project_approval(requester, approval_project_item):
response = requester.post(
endpoint="/build/decision_book/project/approval",
data=approval_project_item
endpoint="/build/decision_book/project/approval", data=approval_project_item
)
print("text", response.text)
print("json", response.json())

View File

@ -3,14 +3,21 @@ import arrow
from service_app_test.bases import RequestToApi
from service_app_test.api_configs import LocalAPI, BothAPIS
from service_app_test.test_application.evyos.decision_book import (
run_decision_book_depends, list_decision_books,
run_decision_book_depends,
list_decision_books,
)
from service_app_test.test_application.evyos.decision_book_items import (
send_invitation_to_building_residents,
collect_invitation_to_building_residents,
assign_people_to_pre_or_wrt, run_decision_book_items,
assign_people_to_pre_or_wrt,
run_decision_book_items,
)
from service_app_test.test_application.migrate_old_data.get_occupants_codes import (
get_occupants_types,
)
from service_app_test.test_application.migrate_old_data.get_type_codes import (
get_type_codes_key_and_class,
)
from service_app_test.test_application.migrate_old_data.get_type_codes import get_type_codes_key_and_class
from service_app_test.test_application.migrate_old_data.people import migrate_people
from service_app_test.test_application.migrate_old_data.building import (
migrate_build,
@ -20,9 +27,23 @@ from service_app_test.test_application.migrate_old_data.company import migrate_c
from service_app_test.test_application.migrate_old_data.accounts import (
migrate_account_records,
)
from service_app_test.test_application.migrate_old_data.decision_book_project import (
approve_build_decision_book_project_approval,
update_decision_book_project,
create_decision_book_items,
generate_insert_project_item,
generate_update_project_item,
generate_approval_project_item,
)
local_api = RequestToApi()
local_api.overwrite_base_url(base_url=LocalAPI.base_url)
password_token = "g17Anw5yBvrASMXtES8olfE8vN32R-U7wO_g8kbhjK8C67ww7fv39Mp3ygjouDw8UrwFJhemqFwbEIi2XzIN1u_rq4nmUSROZAnL3NyhczfizMZml0Rd84HWFA80Z1WpIsOadRlGVN77rr3OrrfYXfp1Fa6f_LsiTj0m3N-ie6Mr-4NIQ-3g25Z4oCD4Up6o"
both_apis = BothAPIS()
both_apis.local_api = local_api
password_token = ""
password_token_occ = ""
login_data = {
"domain": "evyos.com.tr",
"access_key": "karatay.berkay.sup@evyos.com.tr",
@ -30,80 +51,23 @@ login_data = {
"remember_me": False,
"password_token": password_token,
}
login_creds_employee = {
"domain": "evyos.com.tr",
"access_key": "karatay.berkay.sup@evyos.com.tr",
"password": "string",
"remember_me": False,
"password_token": password_token,
}
access_key_president = "mehmet.karatay@hotmail.com"
login_creds_occupant = {
"domain": "evyos.com.tr",
"access_key": access_key_president,
"access_key": "mehmet.karatay@hotmail.com",
"password": "string",
"remember_me": False,
"password_token": "88ENxfw1a0tQRHTQ1RWPsv1iWEe2jzwPqra1tH5PuGmr69fneVDdCpQhgj5LnY0L9IA2Zq8eUX7LRpwKaez0rbYQZRdrKNCfx98M4erSNSRCFPI35tBvGdRuTEISIGoUXPI1xEcfQvGT-AOILc-yPOlyfYLyB7Chej1bjuGxe04hdtqQon2rYLmI8KMCv2XK"
"password_token": password_token_occ,
}
wrt_creds_occupant = {
"domain": "evyos.com.tr",
"access_key": access_key_president,
"password": "string",
"remember_me": False,
"password_token": "",
}
# wag_api = RequestToApi()
# wag_api.overwrite_base_url(base_url=WagAPI.base_url)
# wag_api.selected_object = wag_api.login_via_email_and_password(
# login_data=login_data_wag, is_password_valid=True
# )
local_api = RequestToApi()
local_api.overwrite_base_url(base_url=LocalAPI.base_url)
both_apis = BothAPIS()
# both_apis.wag_api = wag_api
both_apis.local_api = local_api
assign_people_to_create_item = 3
# selection_list = None
selection_list = [
"68b5e3d9-c546-4ebd-98f5-df468f20cc54",
"da2a282c-7053-4cdf-bca5-c41f548883cc",
]
# selection_list = None
manager_token = "jk-8A2kXjk86QGP2WHMrOF7E9UTfzOe0Wcq0HDZFDh78V5YbuNVxmw"
writers_token = manager_token
people_uu_id_list = [
"561a9cbc-587a-4582-8eff-f005f5b1e847",
"561a9cbc-587a-4582-8eff-f005f5b1e847",
"561a9cbc-587a-4582-8eff-f005f5b1e847",
# "523dbcd3-fe87-4208-86c2-da45204dfafc",
# "24aed2e5-bca0-4657-a056-badf9b3aa81c",
]
list_of_attendees = [
"zFhY5z05ixUxvryeGYPdchUDYhIoatghz06bb74FwJuMyrH1w4JVQw",
"wlm0VNMnUDj91B8HLWQE9vKZsOIPcYQlHZqmgV_U_ywIOXFxR7RDxw",
"2ckn8Jp7r0xgHqdExk82SQVUhekwSMNI6Yvd1ESV6LD4769kyeso2g",
"6iY_p1JkptCj1JeptEUokw5BzxtcgQ3tHYkF2Vud9Cl1uzO3TJZmnQ",
"jaOQodhZaDcEJ8_1Y2hjOlKk3f5SiaYfYU-xqDlervLdeYgHumkniw",
"2iPk5lcTYdl_-S7odsLbN8Kij20pVNHmGSDC6gIJHIIRQ74JitP_LA",
"cl82VDi7xQNO77v3CC7X8wcQ4i_C-K9uuKZyqnvh4KHi0ciwqXyOKA",
"UTHZNg9gx0lZ4laDUz7S5xQ5e83vxrufqp7PbPCJx29AxhzX9DL62A",
"rwlasXNiQXXxfRBXv78DkQeSS1S3ubV0ulrXK8cZgmCDkHAIoWvU0w",
"JgAVc5U5lsfrbSx1gx0_SYQcO0q_K2HX8Vir5SIdiM-Z-PuHAG5cRg",
"V_rSldMaE9P_-uEfSsyh1ojEYep4Xma3NY7BIKzuicj_wEkCqFramw",
]
living_space_data = dict(
build_parts_uu_id="68b5e3d9-c546-4ebd-98f5-df468f20cc54",
person_uu_id="dc135536-086f-4e11-af3a-02c7cf65f265",
occupant_type_uu_id="a47372a9-67da-4dfb-82a9-51f9ca15ef63",
expiry_starts=arrow.now().date().__str__(),
)
manager_token = ""
people_uu_id = ""
list_of_attendees = []
assign_people_to_create_item = -1
if assign_people_to_create_item == -1:
local_api.selected_object = local_api.login_via_email_and_password(
login_data=login_data, is_password_valid=False
@ -113,15 +77,44 @@ if assign_people_to_create_item == -1:
migrate_build(requester=both_apis)
migrate_build_living_space(requester=both_apis)
# migrate_account_records(requester=both_apis)
if assign_people_to_create_item == 0:
if not bool(selection_list):
local_api.selected_object = local_api.login_via_email_and_password(
login_data=login_data, is_password_valid=True
)
response = local_api.post(endpoint="/building/living_space/create", data=living_space_data)
print('response', response.text)
occupant_manager = get_occupants_types(
occupant_code="BU-MNG", requester=both_apis.local_api
)["data"]["uu_id"]
response = both_apis.local_api.post(
endpoint="/building/parts/list",
data={"query": {"part_code": "MAN-ROOM"}},
)
print("text", response.text)
print("json", response.json())
response_json = response.json()
build_parts_uu_id = response_json["data"][0]["uu_id"]
response = both_apis.local_api.post(
endpoint="/user/list",
data={"query": {"email": "mehmet.karatay@hotmail.com"}},
)
print("text", response.text)
print("json", response.json())
response_json = response.json()
person_uu_id = response_json["data"][0]["person_uu_id"]
response = local_api.post(
endpoint="/building/living_space/create",
data=dict(
build_parts_uu_id=build_parts_uu_id,
person_uu_id=person_uu_id,
occupant_type_uu_id=occupant_manager,
expiry_starts=arrow.now().date().__str__(),
),
)
print("response", response.text)
local_api.selected_object = local_api.login_via_email_and_password(
login_data=login_creds_occupant,
@ -159,31 +152,33 @@ elif assign_people_to_create_item == 2:
selection_list=selection_list,
)
assign_people_to_pre_or_wrt(
person_uu_id=people_uu_id_list[0],
person_uu_id=people_uu_id,
manager_token=manager_token,
occupant_code="MT-VPR",
requester=both_apis.local_api,
)
assign_people_to_pre_or_wrt(
person_uu_id=people_uu_id_list[1],
person_uu_id=people_uu_id,
manager_token=manager_token,
occupant_code="MT-WRT",
requester=both_apis.local_api,
)
assign_people_to_pre_or_wrt(
person_uu_id=people_uu_id_list[2],
person_uu_id=people_uu_id,
manager_token=manager_token,
occupant_code="MT-PRS",
requester=both_apis.local_api,
)
elif assign_people_to_create_item == 3:
local_api.selected_object = local_api.login_via_email_and_password(
login_data=wrt_creds_occupant,
login_data=login_creds_occupant,
is_password_valid=True,
selection_list=selection_list,
)
selected_decision_book_uu_id = list_decision_books(requester=both_apis.local_api)["data"][0]["uu_id"]
selected_decision_book_uu_id = list_decision_books(requester=both_apis.local_api)[
"data"
][0]["uu_id"]
print("select_company_uu_id", local_api.selected_object)
is_fixed_price = False
@ -200,100 +195,126 @@ elif assign_people_to_create_item == 3:
)["data"]["uu_id"]
run_decision_book_items(
writers_token=writers_token,
writers_token=manager_token,
info_type_uu_id=info_type_reno_uu_id,
item_comment="En son toplantıda bahsedilen 2 nolu daireyi etkiliyen çözüm için kanalizasyon ve "
"tamirleri için fiyat alınarak arka alan yağmur suyu direnajının yaplımasının projelendirilmesi.",
"tamirleri için fiyat alınarak arka alan yağmur suyu direnajının yaplımasının projelendirilmesi.",
start_date=start_date,
end_date=end_date,
requester=both_apis.local_api
requester=both_apis.local_api,
)
unit_price = 17.04
run_decision_book_items(
writers_token=writers_token,
writers_token=manager_token,
info_type_uu_id=info_type_deb_uu_id,
item_comment="Aidat gündemi için 1,2,3 nolu daireler için 1400 TL, diğer daireler için 1500 TL "
"olmasına karar verildi.",
"olmasına karar verildi.",
unit_price=unit_price,
requester=both_apis.local_api
requester=both_apis.local_api,
)
run_decision_book_items(
writers_token=writers_token,
writers_token=manager_token,
info_type_uu_id=info_type_reno_uu_id,
item_comment="Hali hazırda yöneticilik görevini ifa eden 4 nolu daire sahibi Mehmet Karatayın bu "
"görevinin devam etmesine ve apartmanın bank hesaplarının kullanımı ile ilgili yetkisinin devam etmesine.",
"görevinin devam etmesine ve apartmanın bank hesaplarının kullanımı ile ilgili yetkisinin devam etmesine.",
start_date=start_date,
end_date=end_date,
requester=both_apis.local_api
requester=both_apis.local_api,
)
run_decision_book_items(
writers_token=writers_token,
writers_token=manager_token,
info_type_uu_id=info_type_reno_uu_id,
item_comment="Kiriş içinden geçen borunun çıkarılmadan kesilmesine, gerekli tadilatın yapılıp problemin "
"çözülmesine ayrıca bu aşamada yaplımasına onay verilirse her daire kendi radyatölerinin temizliği ve tadilatın yapılmasına.",
"çözülmesine ayrıca bu aşamada yaplımasına onay verilirse her daire kendi radyatölerinin temizliği ve tadilatın yapılmasına.",
start_date=start_date,
end_date=end_date,
requester=both_apis.local_api
requester=both_apis.local_api,
)
run_decision_book_items(
writers_token=writers_token,
writers_token=manager_token,
info_type_uu_id=info_type_reno_uu_id,
item_comment="Dogalgazdan tadilatında çıkan eski boruların satışının yapılmasına.",
start_date=start_date,
end_date=end_date,
requester=both_apis.local_api
requester=both_apis.local_api,
)
run_decision_book_items(
writers_token=writers_token,
writers_token=manager_token,
info_type_uu_id=info_type_reno_uu_id,
item_comment="Apartman içinin tadilat yapılması, ışık ve elektrik sisteminin elden geçirilmesine ve elektrik "
"sayaç il panoların kutuya konulmasına, doğalgaz borularının astar boya ile "
"boyanmasına teklif alınarak projec açılması.",
"sayaç il panoların kutuya konulmasına, doğalgaz borularının astar boya ile "
"boyanmasına teklif alınarak projec açılması.",
start_date=start_date,
end_date=end_date,
requester=both_apis.local_api
requester=both_apis.local_api,
)
run_decision_book_items(
writers_token=writers_token,
writers_token=manager_token,
info_type_uu_id=info_type_reno_uu_id,
item_comment="İç kapı teklif alınarak gerektiğinde tadilatın geliştirilmesi, tek kapı yapılması "
"yada iki kapının alternatifi ile değerlendirilerek fiyat alınması.",
"yada iki kapının alternatifi ile değerlendirilerek fiyat alınması.",
start_date=start_date,
end_date=end_date,
requester=both_apis.local_api
requester=both_apis.local_api,
)
run_decision_book_items(
writers_token=writers_token,
writers_token=manager_token,
info_type_uu_id=info_type_reno_uu_id,
item_comment="Bina su deposunun temizletilmesi.",
start_date=start_date,
end_date=end_date,
requester=both_apis.local_api
requester=both_apis.local_api,
)
run_decision_book_items(
writers_token=writers_token,
writers_token=manager_token,
info_type_uu_id=info_type_reno_uu_id,
item_comment="Çatının havalandırma camlarının değiştirilmesi ve onarılması.",
start_date=start_date,
end_date=end_date,
requester=both_apis.local_api
requester=both_apis.local_api,
)
run_decision_book_items(
writers_token=writers_token,
writers_token=manager_token,
info_type_uu_id=info_type_inf_uu_id,
item_comment="Arka zemin daire sahibinin yoğun yağmurlarda evin su basmaması için "
"arka bölüme saçak yapabilmesine onay verildi.",
requester=both_apis.local_api
"arka bölüme saçak yapabilmesine onay verildi.",
requester=both_apis.local_api,
)
elif assign_people_to_create_item == 4:
pass
# project_lead_creds_occupant = {
# "domain": "evyos.com.tr",
# "access_key": "",
# "password": "string",
# "remember_me": False,
# "password_token": "",
# }
local_api.selected_object = local_api.login_via_email_and_password(
login_data=login_creds_occupant,
is_password_valid=True,
selection_list=selection_list,
)
response = both_apis.local_api.post(
endpoint="/build/decision_book/project/list",
data={"query": {"project_no": "BDT-R_2024_1"}},
)
print("text", response.text)
print("json", response.json())
response_json = response.json()
project_uu_id = response_json["data"][0]["uu_id"]
print("project_uu_id", project_uu_id)
exit()
selected_decision_book_uu_id = list_decision_books(requester=both_apis.local_api)[
"data"
][0]["uu_id"]
print("select_company_uu_id", local_api.selected_object)