Compare commits

...

2 Commits

Author SHA1 Message Date
berkay 73d41b8e10 project item updated 2024-11-20 14:12:56 +03:00
berkay 0b3e0c299c project budget updated 2024-11-20 12:04:02 +03:00
26 changed files with 899 additions and 333 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 import status, HTTPException
from fastapi.responses import JSONResponse from fastapi.responses import JSONResponse
from api_events.events.events.events_bind_services import (
ServiceBindOccupantEventMethods,
)
from databases import ( from databases import (
Build, Build,
BuildParts, BuildParts,
@ -28,6 +31,7 @@ from api_validations.validations_request import (
ListOptions, ListOptions,
ListDecisionBook, ListDecisionBook,
) )
from databases.sql_models.event.event import Services
class DecisionBookDecisionBookItemsListEventMethods(MethodToEvent): class DecisionBookDecisionBookItemsListEventMethods(MethodToEvent):
@ -178,7 +182,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
BuildParts.human_livable == True, BuildParts.human_livable == True,
BuildParts.build_id == build_id, 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( book_payment_dict = dict(
payment_plan_time_periods=str(data_info_type.key), payment_plan_time_periods=str(data_info_type.key),
build_decision_book_item_id=decision_book_item.id, 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.build_decision_book_id == decision_book.id,
BuildDecisionBookProjects.project_type BuildDecisionBookProjects.project_type
== f"{decision_book.decision_type}_{data_info_type.key}", == f"{decision_book.decision_type}_{data_info_type.key}",
system=True system=True,
) )
management_room = BuildParts.filter_one( management_room = BuildParts.filter_one(
BuildParts.build_id == build_id, BuildParts.build_id == build_id, BuildParts.part_no == 0, system=True
BuildParts.part_no == 0,
system=True
).data ).data
occupant_man = OccupantTypes.filter_by_one( occupant_man = OccupantTypes.filter_by_one(
system=True, occupant_code="MT-VPR", occupant_category_type="MT" system=True, occupant_code="MT-VPR", occupant_category_type="MT"
@ -254,7 +256,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
project_start_date=str(local_date), project_start_date=str(local_date),
project_stop_date=str(end_date), project_stop_date=str(end_date),
project_type=f"{decision_book.decision_type}_{data_info_type.key}", 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_id=decision_book.id,
build_decision_book_uu_id=str(decision_book.uu_id), build_decision_book_uu_id=str(decision_book.uu_id),
build_decision_book_item_id=decision_book_item.id, build_decision_book_item_id=decision_book_item.id,
@ -265,27 +267,62 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
book_project_created = BuildDecisionBookProjects.find_or_create( book_project_created = BuildDecisionBookProjects.find_or_create(
**book_project_dict **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( decision_book_item.update(
item_comment=f"{book_project_created.project_no}_{book_project_created.project_name} " 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() decision_book_item.save_and_confirm()
project_lead = OccupantTypes.filter_by_one( project_lead = OccupantTypes.filter_by_one(
system=True, occupant_code="PRJ-LDR", occupant_category_type="PRJ" system=True, occupant_code="PRJ-LDR", occupant_category_type="PRJ"
).data ).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( project_person = BuildDecisionBookProjectPerson.find_or_create(
build_decision_book_project_id=book_project_created.id, build_decision_book_project_id=book_project_created.id,
build_decision_book_project_uu_id=str(book_project_created.uu_id), build_decision_book_project_uu_id=str(book_project_created.uu_id),
living_space_id=manager_living_space.id, living_space_id=project_leader.id,
living_space_uu_id=str(manager_living_space.uu_id), living_space_uu_id=str(project_leader.uu_id),
project_team_type_id=project_lead.id,
project_team_type_uu_id=str(project_lead.uu_id),
) )
project_person.save_and_confirm() project_person.save_and_confirm()
book_project_created.update(
project_response_living_space_id=project_leader.id,
project_response_living_space_uu_id=str(project_leader.uu_id),
)
book_project_created.save()
return book_project_created return book_project_created
elif data_info_type.key == "BDT-S": elif data_info_type.key == "BDT-S":
raise HTTPException( raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST, status_code=status.HTTP_400_BAD_REQUEST,
@ -332,7 +369,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
book_items = BuildDecisionBookItems.filter_all( book_items = BuildDecisionBookItems.filter_all(
BuildDecisionBookItems.build_decision_book_id == decision_book.id, BuildDecisionBookItems.build_decision_book_id == decision_book.id,
system=True system=True,
) )
if int(book_items.count) < 3: if int(book_items.count) < 3:
BuildDecisionBookItems.check_meeting_is_valid_to_start_add_attendance( BuildDecisionBookItems.check_meeting_is_valid_to_start_add_attendance(
@ -342,7 +379,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
book_items = BuildDecisionBookItems.filter_all( book_items = BuildDecisionBookItems.filter_all(
BuildDecisionBookItems.build_decision_book_id == decision_book.id, BuildDecisionBookItems.build_decision_book_id == decision_book.id,
system=True system=True,
) )
data_dict["item_order"] = int(book_items.count) + 1 data_dict["item_order"] = int(book_items.count) + 1
@ -350,7 +387,9 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
data_dict["build_decision_book_uu_id"] = str(decision_book.uu_id) data_dict["build_decision_book_uu_id"] = str(decision_book.uu_id)
data_info_type = ApiEnumDropdown.filter_by_one( 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
data_info_types = ApiEnumDropdown.due_type_search() data_info_types = ApiEnumDropdown.due_type_search()
for info_type in data_info_types: for info_type in data_info_types:
@ -359,8 +398,14 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
break break
row_is_debit = str(data_info_type.key).upper() in ["BDT-A", "BDT-D"] 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"] row_is_project = str(data_info_type.key).upper() in [
debit_dates_required = not data_dict["debit_start_date"] or not data_dict["debit_end_date"] "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: if row_is_project and debit_dates_required:
raise HTTPException( raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST, status_code=status.HTTP_400_BAD_REQUEST,
@ -370,7 +415,9 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
data_dict["info_type_id"] = data_info_type.id data_dict["info_type_id"] = data_info_type.id
data_dict["info_type_uu_id"] = str(data_info_type.uu_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 = ( debit_start_date, debit_end_date = (
data_dict["debit_start_date"], data_dict["debit_start_date"],
@ -389,7 +436,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
new_decision_book_item = BuildDecisionBookItems.find_or_create(**data_dict) new_decision_book_item = BuildDecisionBookItems.find_or_create(**data_dict)
new_decision_book_item.save_and_confirm() 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( if created_payment_records_dict := cls.create_payment_records_for_each_build_part(
data_info_type=data_info_type, data_info_type=data_info_type,
build_id=decision_book.build_id, build_id=decision_book.build_id,
@ -420,7 +467,9 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
new_decision_book_item.update(is_payment_created=True) new_decision_book_item.update(is_payment_created=True)
elif row_is_project: elif row_is_project:
project_no = str(created_payment_records_dict.project_no) 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(item_comment=item_comment)
new_decision_book_item.update(is_payment_created=True) new_decision_book_item.update(is_payment_created=True)
new_decision_book_item.save_and_confirm() 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}", detail=f"No Decision Book is match with given UUID {data.build_decision_book_uu_id}",
) )
manager_occupant_type = OccupantTypes.filter_by_one( manager_occupant_type = OccupantTypes.filter_by_one(
system=True, system=True, occupant_code="BU-MNG", occupant_category_type="BU"
occupant_code="BU-MNG",
occupant_category_type="BU"
).data ).data
if ( if (
not manager_occupant_type.uu_id not manager_occupant_type.uu_id
@ -263,7 +261,8 @@ class DecisionBookPersonAssignOccupantEventMethods(MethodToEvent):
) )
assign_occupant_type = OccupantTypes.filter_by_one( 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 ).data
if not assign_occupant_type: if not assign_occupant_type:
raise HTTPException( raise HTTPException(

View File

@ -96,7 +96,9 @@ class BuildDecisionBookInvitationsCreateEventMethods(MethodToEvent):
) )
# Create an invitation for specific invitation type to start invite sending process # 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( book_invitation = BuildDecisionBookInvitations.find_or_create(
build_id=token_dict.selected_occupant.build_id, build_id=token_dict.selected_occupant.build_id,
build_uu_id=token_dict.selected_occupant.build_uuid, build_uu_id=token_dict.selected_occupant.build_uuid,
@ -199,7 +201,8 @@ class BuildDecisionBookInvitationsCreateEventMethods(MethodToEvent):
BuildDecisionBookPerson.invite_id == book_invitation.id, BuildDecisionBookPerson.invite_id == book_invitation.id,
BuildDecisionBookPerson.build_living_space_id.in_( 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, system=True,

View File

@ -5,7 +5,7 @@ from databases import (
BuildDecisionBookProjects, BuildDecisionBookProjects,
BuildDecisionBookProjectPerson, BuildDecisionBookProjectPerson,
BuildDecisionBookPayments, BuildDecisionBookPayments,
OccupantTypes OccupantTypes,
) )
from api_events.events.abstract_class import MethodToEvent, ActionsSchema from api_events.events.abstract_class import MethodToEvent, ActionsSchema
@ -17,13 +17,12 @@ from api_validations.validations_request import (
ListOptions, ListOptions,
) )
from api_validations.core_response import AlchemyJsonResponse from api_validations.core_response import AlchemyJsonResponse
from databases import ( from databases import Build, BuildLivingSpace, BuildParts, ApiEnumDropdown
Build, from databases.sql_models.building.decision_book import (
BuildLivingSpace, BuildDecisionBookProjectItems,
BuildParts, BuildDecisionBookItems,
ApiEnumDropdown BuildDecisionBook,
) )
from databases.sql_models.building.decision_book import BuildDecisionBookProjectItems, BuildDecisionBookItems
class ProjectDecisionBookListEventMethods(MethodToEvent): class ProjectDecisionBookListEventMethods(MethodToEvent):
@ -31,13 +30,13 @@ class ProjectDecisionBookListEventMethods(MethodToEvent):
event_type = "LIST" event_type = "LIST"
__event_keys__ = { __event_keys__ = {
"96459b36-37f2-4d5b-8370-c459058d5bce": "project_decision_book_person_list", "96459b36-37f2-4d5b-8370-c459058d5bce": "project_decision_book_list",
} }
@classmethod @classmethod
def project_decision_book_person_list( def project_decision_book_list(
cls, cls,
data: ListOptions, list_options: ListOptions,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject], token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
): ):
if isinstance(token_dict, EmployeeTokenObject): if isinstance(token_dict, EmployeeTokenObject):
@ -45,15 +44,23 @@ class ProjectDecisionBookListEventMethods(MethodToEvent):
status_code="HTTP_403_FORBIDDEN", status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED", error_case="NOT_ALLOWED",
message="Employee cannot create project project decision book", message="Employee cannot create project project decision book",
data={} data={},
) )
elif isinstance(token_dict, OccupantTokenObject): elif isinstance(token_dict, OccupantTokenObject):
project_person = BuildDecisionBookProjectPerson.filter_all( build_decision_book = BuildDecisionBook.filter_one(
BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id, 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={},
) )
decision_book_ids = [_.build_decision_book_project_id for _ in project_person.data] BuildDecisionBookProjects.filter_attr = list_options
decision_book_projects = BuildDecisionBookProjects.filter_all( 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( return AlchemyJsonResponse(
status_code="HTTP_200_OK", status_code="HTTP_200_OK",
@ -81,35 +88,35 @@ class ProjectDecisionBookCreateEventMethods(MethodToEvent):
status_code="HTTP_403_FORBIDDEN", status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED", error_case="NOT_ALLOWED",
message="Employee cannot create project project decision book", message="Employee cannot create project project decision book",
data={} data={},
) )
elif isinstance(token_dict, OccupantTokenObject): elif isinstance(token_dict, OccupantTokenObject):
living_space = BuildLivingSpace.filter_one( 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 ).data
if not living_space: if not living_space:
raise BuildDecisionBookProjects.raise_http_exception( raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_404_NOT_FOUND", status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND", error_case="NOT_FOUND",
message="Living space not found", message="Living space not found",
data={} data={},
) )
occupant_type = OccupantTypes.filter_by_one( occupant_type = OccupantTypes.filter_by_one(
occupant_category_type="PRJ", occupant_category_type="PRJ",
occupant_code="PRJ-LDR", occupant_code="PRJ-LDR",
id=living_space.occupant_type id=living_space.occupant_type,
).data ).data
if not occupant_type: if not occupant_type:
raise BuildDecisionBookProjects.raise_http_exception( raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_404_NOT_FOUND", status_code="HTTP_404_NOT_FOUND",
error_case="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", 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( 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
BuildDecisionBookProjectPerson.living_space_id == token_dict.selected_occupant.living_space_id, == token_dict.selected_occupant.living_space_id,
) )
return AlchemyJsonResponse( return AlchemyJsonResponse(
status_code="HTTP_200_OK", status_code="HTTP_200_OK",
@ -137,53 +144,54 @@ class ProjectDecisionBookUpdateEventMethods(MethodToEvent):
status_code="HTTP_403_FORBIDDEN", status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED", error_case="NOT_ALLOWED",
message="Employee cannot create project project decision book", message="Employee cannot create project project decision book",
data={} data={},
) )
elif isinstance(token_dict, OccupantTokenObject): elif isinstance(token_dict, OccupantTokenObject):
living_space = BuildLivingSpace.filter_one( 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 ).data
if not living_space: if not living_space:
raise BuildDecisionBookProjects.raise_http_exception( raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_404_NOT_FOUND", status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND", error_case="NOT_FOUND",
message="Living space not found", message="Living space not found",
data={} data={},
) )
occupant_type = OccupantTypes.filter_by_one( occupant_type = OccupantTypes.filter_by_one(
occupant_category_type="PRJ", occupant_category_type="PRJ",
occupant_code="PRJ-LDR", occupant_code="PRJ-LDR",
id=living_space.occupant_type id=living_space.occupant_type,
).data ).data
if not occupant_type: if not occupant_type:
raise BuildDecisionBookProjects.raise_http_exception( raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_404_NOT_FOUND", status_code="HTTP_404_NOT_FOUND",
error_case="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", 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( decision_book_project_person = BuildDecisionBookProjectPerson.filter_one(
BuildDecisionBookProjects.build_decision_book_project_uu_id == data.get("build_decision_book_project_uu_id"), BuildDecisionBookProjectPerson.build_decision_book_project_uu_id
BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id, == data.build_decision_book_project_uu_id,
BuildDecisionBookProjectPerson.living_space_id
== token_dict.selected_occupant.living_space_id,
).data ).data
if not decision_book_project_person: if not decision_book_project_person:
raise BuildDecisionBookProjects.raise_http_exception( raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_404_NOT_FOUND", status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND", error_case="NOT_FOUND",
message="This project is not allowed for this occupant", message="This project is not allowed for this occupant",
data={} data={},
) )
decision_book_project = BuildDecisionBookProjects.filter_one( 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: if decision_book_project.is_completed:
raise BuildDecisionBookProjects.raise_http_exception( raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_403_FORBIDDEN", status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED", error_case="NOT_ALLOWED",
message="Project decision book is closed. No modification is allowed", message="Project decision book is closed. No modification is allowed",
data={} data={},
) )
data_dict = data.excluded_dump() data_dict = data.excluded_dump()
decision_book_project.update(**data_dict) decision_book_project.update(**data_dict)
@ -213,57 +221,58 @@ class ProjectDecisionBookApprovalEventMethods(MethodToEvent):
status_code="HTTP_403_FORBIDDEN", status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED", error_case="NOT_ALLOWED",
message="Employee cannot create project project decision book", message="Employee cannot create project project decision book",
data={} data={},
) )
elif isinstance(token_dict, OccupantTokenObject): elif isinstance(token_dict, OccupantTokenObject):
living_space = BuildLivingSpace.filter_one( 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 ).data
if not living_space: if not living_space:
raise BuildDecisionBookProjects.raise_http_exception( raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_404_NOT_FOUND", status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND", error_case="NOT_FOUND",
message="Living space not found", message="Living space not found",
data={} data={},
) )
occupant_type = OccupantTypes.filter_by_one( occupant_type = OccupantTypes.filter_by_one(
system=True,
occupant_category_type="PRJ", occupant_category_type="PRJ",
occupant_code="PRJ-LDR", occupant_code="PRJ-LDR",
id=living_space.occupant_type id=living_space.occupant_type,
).data ).data
if not occupant_type: if not occupant_type:
raise BuildDecisionBookProjects.raise_http_exception( raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_404_NOT_FOUND", status_code="HTTP_404_NOT_FOUND",
error_case="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", 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( decision_book_project_person = BuildDecisionBookProjectPerson.filter_one(
BuildDecisionBookProjects.build_decision_book_project_uu_id == data.get( BuildDecisionBookProjectPerson.build_decision_book_project_uu_id
"build_decision_book_project_uu_id"), == data.build_decision_book_project_uu_id,
BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id, BuildDecisionBookProjectPerson.living_space_id
== token_dict.selected_occupant.living_space_id,
).data ).data
if not decision_book_project_person: if not decision_book_project_person:
raise BuildDecisionBookProjects.raise_http_exception( raise BuildDecisionBookProjectPerson.raise_http_exception(
status_code="HTTP_404_NOT_FOUND", status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND", error_case="NOT_FOUND",
message="This project is not allowed for this occupant", message="This project is not allowed for this occupant",
data={} data={},
) )
decision_book_project = BuildDecisionBookProjects.filter_one( 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 ).data
if decision_book_project.is_completed: if decision_book_project.is_completed:
raise BuildDecisionBookProjects.raise_http_exception( raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_403_FORBIDDEN", status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED", error_case="NOT_ALLOWED",
message="Project decision book is closed. No modification is allowed", message="Project decision book is closed. No modification is allowed",
data={} data={},
) )
data_dict = data.excluded_dump() data_dict = data.excluded_dump()
data_dict["is_completed"] = True data_dict["is_completed"] = True
data_dict["status_id"] = 1 # is completed status
build_parts_list = BuildParts.filter_all( build_parts_list = BuildParts.filter_all(
BuildParts.human_livable == True, BuildParts.human_livable == True,
@ -271,19 +280,21 @@ class ProjectDecisionBookApprovalEventMethods(MethodToEvent):
).data ).data
decision_book_project_item = BuildDecisionBookItems.filter_one( 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 ).data
book_payment_dict = dict( book_payment_dict = dict(
payment_plan_time_periods=str(),
build_decision_book_item_id=decision_book_project_item.id, build_decision_book_item_id=decision_book_project_item.id,
build_decision_book_item_uu_id=str(decision_book_project_item.uu_id), build_decision_book_item_uu_id=str(decision_book_project_item.uu_id),
currency=decision_book_project.currency, currency=decision_book_project.currency,
) )
payment_type = ApiEnumDropdown.get_debit_search(search_debit="DT-D") payment_type = ApiEnumDropdown.get_debit_search(search_debit="DT-D")
for final_price in data.final_price_list: for final_price in data.final_price_list or []:
for build_part_single in build_parts_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) local_date = system_arrow.get(local_date)
payment_amount = abs(float(final_price["price"])) * -1 payment_amount = abs(float(final_price["price"])) * -1
created_book_payment = BuildDecisionBookPayments.find_or_create( created_book_payment = BuildDecisionBookPayments.find_or_create(
@ -327,29 +338,18 @@ class ProjectDecisionBookPatchEventMethods(MethodToEvent):
return return
ProjectDecisionBookListEventMethod = ( ProjectDecisionBookListEventMethod = ProjectDecisionBookListEventMethods(
ProjectDecisionBookListEventMethods( action=ActionsSchema(endpoint="/build/decision_book/project/list")
action=ActionsSchema(endpoint="/build/decision_book/project/person/list")
) )
) ProjectDecisionBookCreateEventMethod = ProjectDecisionBookCreateEventMethods(
ProjectDecisionBookCreateEventMethod = (
ProjectDecisionBookCreateEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/create") action=ActionsSchema(endpoint="/build/decision_book/project/create")
) )
) ProjectDecisionBookUpdateEventMethod = ProjectDecisionBookUpdateEventMethods(
ProjectDecisionBookUpdateEventMethod = (
ProjectDecisionBookUpdateEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/update") action=ActionsSchema(endpoint="/build/decision_book/project/update")
) )
) ProjectDecisionBookApprovalEventMethod = ProjectDecisionBookApprovalEventMethods(
ProjectDecisionBookApprovalEventMethod = (
ProjectDecisionBookApprovalEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/approval") action=ActionsSchema(endpoint="/build/decision_book/project/approval")
) )
) ProjectDecisionBookPatchEventMethod = ProjectDecisionBookPatchEventMethods(
ProjectDecisionBookPatchEventMethod = (
ProjectDecisionBookPatchEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/patch") action=ActionsSchema(endpoint="/build/decision_book/project/patch")
) )
)

View File

@ -14,6 +14,7 @@ from api_validations.validations_request import (
from api_events.events.abstract_class import MethodToEvent, ActionsSchema from api_events.events.abstract_class import MethodToEvent, ActionsSchema
from api_objects.auth.token_objects import EmployeeTokenObject, OccupantTokenObject from api_objects.auth.token_objects import EmployeeTokenObject, OccupantTokenObject
from api_validations.core_response import AlchemyJsonResponse from api_validations.core_response import AlchemyJsonResponse
from databases.sql_models.building.decision_book import BuildDecisionBookProjects
class BuildDecisionBookProjectItemsListEventMethods(MethodToEvent): class BuildDecisionBookProjectItemsListEventMethods(MethodToEvent):
@ -47,16 +48,35 @@ class BuildDecisionBookProjectItemsCreateEventMethods(MethodToEvent):
@staticmethod @staticmethod
def build_decision_book_project_items_create( def build_decision_book_project_items_create(
requester: Union[EmployeeTokenObject, OccupantTokenObject], token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
decision_book_project_items: InsertBuildDecisionBookProjectItems, data: InsertBuildDecisionBookProjectItems,
): ):
response = BuildDecisionBookProjectItems.create_item( if isinstance(token_dict, EmployeeTokenObject):
requester=requester, raise BuildDecisionBookProjectItems.raise_http_exception(
decision_book_project_items=decision_book_project_items, status_code="HTTP_403_FORBIDDEN",
error_case="UNAUTHORIZED",
message=f"No permission to create decision book project items",
data={},
) )
elif isinstance(token_dict, OccupantTokenObject):
book_project = BuildDecisionBookProjects.filter_one(
BuildDecisionBookProjects.uu_id == data.build_decision_book_project_uu_id,
BuildDecisionBookProjects.project_response_living_space_id == token_dict.selected_occupant.living_space_id
).data
if not book_project:
raise BuildDecisionBookProjectItems.raise_http_exception(
status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND",
message=f"This user can not create project item for this project uu_id : {data.build_decision_book_project_uu_id}",
data={},
)
data_dict = data.excluded_dump()
data_dict["build_decision_book_project_id"] = book_project.id
created_project_item = BuildDecisionBookProjectItems.find_or_create(**data_dict)
created_project_item.save_and_confirm()
return AlchemyJsonResponse( return AlchemyJsonResponse(
message="Build Decision Book Project Items Create", message="Build Decision Book Project Items Create",
result=response, result=created_project_item.get_dict(),
) )
@ -76,7 +96,7 @@ class BuildDecisionBookProjectItemsUpdateEventMethods(MethodToEvent):
status_code="HTTP_403_FORBIDDEN", status_code="HTTP_403_FORBIDDEN",
error_case="UNAUTHORIZED", error_case="UNAUTHORIZED",
message=f"No permission to update decision book project items", message=f"No permission to update decision book project items",
data={} data={},
) )

View File

@ -27,7 +27,7 @@ class ProjectDecisionBookPersonListEventMethods(MethodToEvent):
@classmethod @classmethod
def project_decision_book_person_list( def project_decision_book_person_list(
cls, cls,
data: ListOptions, list_options: ListOptions,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject], token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
): ):
if isinstance(token_dict, EmployeeTokenObject): if isinstance(token_dict, EmployeeTokenObject):
@ -35,19 +35,24 @@ class ProjectDecisionBookPersonListEventMethods(MethodToEvent):
status_code="HTTP_403_FORBIDDEN", status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED", error_case="NOT_ALLOWED",
message="Employee cannot create project project decision book", message="Employee cannot create project project decision book",
data={} data={},
) )
elif isinstance(token_dict, OccupantTokenObject): elif isinstance(token_dict, OccupantTokenObject):
project_person = BuildDecisionBookProjectPerson.filter_all( 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( 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( return AlchemyJsonResponse(
status_code="HTTP_200_OK", status_code="HTTP_200_OK",
message="Project decision book created successfully", message="Project decision person book listed successfully",
result=decision_book_projects, result=decision_book_projects,
) )
@ -71,12 +76,14 @@ class ProjectDecisionBookPersonCreateEventMethods(MethodToEvent):
status_code="HTTP_403_FORBIDDEN", status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED", error_case="NOT_ALLOWED",
message="Employee cannot create project project decision book", message="Employee cannot create project project decision book",
data={} data={},
) )
elif isinstance(token_dict, OccupantTokenObject): elif isinstance(token_dict, OccupantTokenObject):
decision_book = BuildDecisionBookProjects.filter_one( decision_book = BuildDecisionBookProjects.filter_one(
BuildDecisionBookProjects.build_decision_book_uu_id==data.get("build_decision_book_uu_id"), BuildDecisionBookProjects.build_decision_book_uu_id
BuildDecisionBookProjects.project_response_living_space_id==token_dict.selected_occupant.living_space_id, == data.get("build_decision_book_uu_id"),
BuildDecisionBookProjects.project_response_living_space_id
== token_dict.selected_occupant.living_space_id,
) )
return AlchemyJsonResponse( return AlchemyJsonResponse(
status_code="HTTP_200_OK", status_code="HTTP_200_OK",
@ -104,12 +111,14 @@ class ProjectDecisionBookPersonUpdateEventMethods(MethodToEvent):
status_code="HTTP_403_FORBIDDEN", status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED", error_case="NOT_ALLOWED",
message="Employee cannot create project project decision book", message="Employee cannot create project project decision book",
data={} data={},
) )
elif isinstance(token_dict, OccupantTokenObject): elif isinstance(token_dict, OccupantTokenObject):
decision_book_project_person = BuildDecisionBookProjectPerson.filter_one( decision_book_project_person = BuildDecisionBookProjectPerson.filter_one(
BuildDecisionBookProjects.build_decision_book_project_uu_id == data.get("build_decision_book_uu_id"), BuildDecisionBookProjects.build_decision_book_project_uu_id
BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id, == data.get("build_decision_book_uu_id"),
BuildDecisionBookProjects.living_space_id
== token_dict.selected_occupant.living_space_id,
) )
return AlchemyJsonResponse( return AlchemyJsonResponse(
@ -138,12 +147,14 @@ class ProjectDecisionBookPersonPatchEventMethods(MethodToEvent):
status_code="HTTP_403_FORBIDDEN", status_code="HTTP_403_FORBIDDEN",
error_case="NOT_ALLOWED", error_case="NOT_ALLOWED",
message="Employee cannot create project project decision book", message="Employee cannot create project project decision book",
data={} data={},
) )
elif isinstance(token_dict, OccupantTokenObject): elif isinstance(token_dict, OccupantTokenObject):
decision_book_project_person = BuildDecisionBookProjectPerson.filter_one( decision_book_project_person = BuildDecisionBookProjectPerson.filter_one(
BuildDecisionBookProjects.build_decision_book_project_uu_id == data.get("build_decision_book_uu_id"), BuildDecisionBookProjects.build_decision_book_project_uu_id
BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id, == data.get("build_decision_book_uu_id"),
BuildDecisionBookProjects.living_space_id
== token_dict.selected_occupant.living_space_id,
) )
return AlchemyJsonResponse( return AlchemyJsonResponse(
status_code="HTTP_200_OK", status_code="HTTP_200_OK",
@ -152,11 +163,9 @@ class ProjectDecisionBookPersonPatchEventMethods(MethodToEvent):
) )
ProjectDecisionBookPersonListEventMethod = ( ProjectDecisionBookPersonListEventMethod = ProjectDecisionBookPersonListEventMethods(
ProjectDecisionBookPersonListEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/people/list") action=ActionsSchema(endpoint="/build/decision_book/project/people/list")
) )
)
ProjectDecisionBookPersonCreateEventMethod = ( ProjectDecisionBookPersonCreateEventMethod = (
ProjectDecisionBookPersonCreateEventMethods( ProjectDecisionBookPersonCreateEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/people/create") action=ActionsSchema(endpoint="/build/decision_book/project/people/create")
@ -167,8 +176,6 @@ ProjectDecisionBookPersonUpdateEventMethod = (
action=ActionsSchema(endpoint="/build/decision_book/project/people/update") action=ActionsSchema(endpoint="/build/decision_book/project/people/update")
) )
) )
ProjectDecisionBookPersonPatchEventMethod = ( ProjectDecisionBookPersonPatchEventMethod = ProjectDecisionBookPersonPatchEventMethods(
ProjectDecisionBookPersonPatchEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/people/patch") 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 ( from api_events.tasks2events.occupant_tasks.meeting_voted_president import (
BuildMeetingVotedPresident, 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__ = [ __all__ = [
@ -32,4 +41,9 @@ __all__ = [
"BuildMeetingAdvisor", "BuildMeetingAdvisor",
"BuildMeetingAttendance", "BuildMeetingAttendance",
"BuildMeetingVotedPresident", "BuildMeetingVotedPresident",
"ProjectLeader",
"ProjectFinanceResponsible",
"ProjectEmployee",
"ProjectTechnical",
"ProjectResponsible",
] ]

View File

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

View File

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

View File

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

View File

@ -43,7 +43,7 @@ class UpdateBuildDecisionBookProjectPerson(PydanticBaseModel):
class InsertBuildDecisionBookProjects(BaseModelRegular): class InsertBuildDecisionBookProjects(BaseModelRegular):
build_decision_book_item_uu_id: str build_decision_book_item_uu_id: str
project_response_person_uu_id: str project_responsible_person_uu_id: str
project_name: str project_name: str
project_start_date: str project_start_date: str
project_stop_date: str project_stop_date: str
@ -77,8 +77,9 @@ class UpdateBuildDecisionBookProjects(PydanticBaseModel):
class ApprovalsBuildDecisionBookProjects(PydanticBaseModel): class ApprovalsBuildDecisionBookProjects(PydanticBaseModel):
build_decision_book_project_uu_id: str build_decision_book_project_uu_id: str
final_price_list: list[dict] # {"date": "2021-01-01", "price": 1000}
project_stop_date: str project_stop_date: str
status_code: Optional[int] = None
final_price_list: Optional[list[dict]] = None # {"date": "2021-01-01", "price": 1000}
class InsertBuildDecisionBookProjectItemDebits(PydanticBaseModel): class InsertBuildDecisionBookProjectItemDebits(PydanticBaseModel):

View File

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

View File

@ -650,3 +650,99 @@ class AccountRecords(CrudCollection):
# ) # )
# ) # )
# print("is all dues_type", payment_dict["dues_type"], paid_value) # 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( occupant_type_uu_id: Mapped[str] = mapped_column(
String, nullable=False, comment="Occupant Type UUID" String, nullable=False, comment="Occupant Type UUID"
) )
__table_args__ = ( __table_args__ = (
{"comment": "Living Space inside building parts that are related to people"}, {"comment": "Living Space inside building parts that are related to people"},
) )
@ -574,7 +575,6 @@ class BuildLivingSpace(CrudCollection):
).data ).data
related_service = Services.filter_by_one( related_service = Services.filter_by_one(
related_responsibility=occupant_type.occupant_code, related_responsibility=occupant_type.occupant_code,
**Services.valid_record_dict,
).data ).data
created_living_space.save_and_confirm() created_living_space.save_and_confirm()

View File

@ -883,14 +883,14 @@ class BuildDecisionBookPayments(CrudCollection):
String, nullable=False, comment="Build Part UUID" String, nullable=False, comment="Build Part UUID"
) )
budget_records_id: Mapped[int] = mapped_column(ForeignKey("account_records.id"), nullable=True) # budget_records_id: Mapped[int] = mapped_column(ForeignKey("account_records.id"), nullable=True)
budget_records_uu_id: Mapped[str] = mapped_column( # budget_records_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Budget UUID" # String, nullable=True, comment="Budget UUID"
) # )
accounting_id: Mapped[int] = mapped_column(ForeignKey("account_detail.id"), nullable=True) # accounting_id: Mapped[int] = mapped_column(ForeignKey("account_detail.id"), nullable=True)
accounting_uu_id: Mapped[str] = mapped_column( # accounting_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Accounting UUID" # String, nullable=True, comment="Accounting UUID"
) # )
# receive_debit_id: Mapped[int] = mapped_column(ForeignKey("api_enum_dropdown.id"), nullable=True) # 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") # receive_debit_uu_id: Mapped[str] = mapped_column(String, nullable=True, comment="Debit UUID")
@ -920,11 +920,6 @@ class BuildDecisionBookPayments(CrudCollection):
process_date, process_date,
unique=True, unique=True,
), ),
Index(
"build_decision_book_payments_detail_ndx_01",
budget_records_id,
process_date,
),
{"comment": "Payment Details of Decision Book Payments"}, {"comment": "Payment Details of Decision Book Payments"},
) )
@ -1023,7 +1018,6 @@ class BuildDecisionBookProjects(CrudCollection):
project_start_date: Mapped[TIMESTAMP] = mapped_column( project_start_date: Mapped[TIMESTAMP] = mapped_column(
TIMESTAMP, nullable=False, comment="Project Start Date" TIMESTAMP, nullable=False, comment="Project Start Date"
) )
project_stop_date: Mapped[TIMESTAMP] = mapped_column( project_stop_date: Mapped[TIMESTAMP] = mapped_column(
TIMESTAMP, server_default="2099-12-31 23:59:59" TIMESTAMP, server_default="2099-12-31 23:59:59"
) )
@ -1036,7 +1030,7 @@ class BuildDecisionBookProjects(CrudCollection):
is_completed: Mapped[bool] = mapped_column( is_completed: Mapped[bool] = mapped_column(
Boolean, server_default="0", comment="Project is Completed" Boolean, server_default="0", comment="Project is Completed"
) )
status_id: Mapped[int] = mapped_column(SmallInteger, nullable=True) status_code: Mapped[int] = mapped_column(SmallInteger, nullable=True)
resp_company_fix_wage: Mapped[float] = mapped_column( resp_company_fix_wage: Mapped[float] = mapped_column(
Numeric(10, 2), server_default="0" Numeric(10, 2), server_default="0"
) )
@ -1045,7 +1039,7 @@ class BuildDecisionBookProjects(CrudCollection):
meeting_date: Mapped[TIMESTAMP] = mapped_column( meeting_date: Mapped[TIMESTAMP] = mapped_column(
TIMESTAMP, server_default="1900-01-01 00:00:00", index=True TIMESTAMP, server_default="1900-01-01 00:00:00", index=True
) )
currency: Mapped[float] = mapped_column(String(8), server_default="TRY") currency: Mapped[str] = mapped_column(String(8), server_default="TRY")
bid_price: Mapped[float] = mapped_column(Numeric(16, 4), server_default="0") bid_price: Mapped[float] = mapped_column(Numeric(16, 4), server_default="0")
approved_price: Mapped[float] = mapped_column(Numeric(16, 4), server_default="0") approved_price: Mapped[float] = mapped_column(Numeric(16, 4), server_default="0")
final_price: Mapped[float] = mapped_column(Numeric(16, 4), server_default="0") final_price: Mapped[float] = mapped_column(Numeric(16, 4), server_default="0")
@ -1062,7 +1056,7 @@ class BuildDecisionBookProjects(CrudCollection):
build_decision_book_uu_id: Mapped[str] = mapped_column( build_decision_book_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Decision Book UUID" String, nullable=True, comment="Decision Book UUID"
) )
build_decision_book_item_id = mapped_column( build_decision_book_item_id: Mapped[int] = mapped_column(
ForeignKey("build_decision_book_items.id"), nullable=False ForeignKey("build_decision_book_items.id"), nullable=False
) )
build_decision_book_item_uu_id: Mapped[str] = mapped_column( build_decision_book_item_uu_id: Mapped[str] = mapped_column(
@ -1201,13 +1195,6 @@ class BuildDecisionBookProjectPerson(CrudCollection):
String, nullable=True, comment="Living Space UUID" 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__ = ( __table_args__ = (
{"comment": "People that are attended to building project meetings."}, {"comment": "People that are attended to building project meetings."},
) )
@ -1245,6 +1232,7 @@ class BuildDecisionBookProjectItems(CrudCollection):
{"comment": "Project Items related to decision taken at building meetings"}, {"comment": "Project Items related to decision taken at building meetings"},
) )
# #
# class BuildDecisionBookPaymentsMaster(CrudCollection): # 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 ( from .decision_book.decision_book_invitations.router import (
build_decision_book_invitations, 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__ = [ __all__ = [
@ -87,4 +96,7 @@ __all__ = [
"build_project_decision_book_person_route", "build_project_decision_book_person_route",
"endpoint_restriction_route", "endpoint_restriction_route",
"build_decision_book_invitations", "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( @build_decision_book_project_route.post(
path="/list", summary="List Active/Delete/Confirm Build Decision Book People" 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) token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(list_options=list_options, token_dict=token_dict) 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", path="/create",
summary="Create Build Decision Book Project People with given auth levels", 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) token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(data=data, token_dict=token_dict) 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
path="/update/{build_decision_book_project_id}", path="/update/{build_decision_book_project_id}",
summary="Add people to Build Decision People Book with given auth levels", 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) token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(data=data, token_dict=token_dict) return token_dict.available_event(data=data, token_dict=token_dict)
@build_decision_book_project_route.post( @build_decision_book_project_route.post(
path="/approval/{build_decision_book_project_id}", path="/approval",
summary="Approval people from Build Decision Book Project People with given auth levels", summary="Approval people from Build Decision Book Project People with given auth levels",
) )
def build_decision_book_project_invite_approval( def build_decision_book_project_invite_approval(

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( 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_router(
build_decision_book_project_items_route, include_in_schema=True 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( @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) token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(list_options=list_options, token_dict=token_dict) 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", path="/create",
summary="Create Build Decision Book Project People with given auth levels", 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) token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(data=data, token_dict=token_dict) return token_dict.available_event(data=data, token_dict=token_dict)
@ -41,13 +47,13 @@ def build_decision_book_project_people_items_create(request: Request, data: Inse
def build_decision_book_project_people_items_update( def build_decision_book_project_people_items_update(
request: Request, request: Request,
build_decision_book_project_item_uu_id: str, build_decision_book_project_item_uu_id: str,
data: UpdateBuildDecisionBookProjectItems data: UpdateBuildDecisionBookProjectItems,
): ):
token_dict = parse_token_object_to_dict(request=request) token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event( return token_dict.available_event(
data=data, data=data,
build_decision_book_project_item_uu_id=build_decision_book_project_item_uu_id, build_decision_book_project_item_uu_id=build_decision_book_project_item_uu_id,
token_dict=token_dict token_dict=token_dict,
) )
@ -62,5 +68,5 @@ def build_decision_book_project_people_items_patch(
return token_dict.available_event( return token_dict.available_event(
data=data, data=data,
build_decision_book_project_item_uu_id=build_decision_book_project_item_uu_id, 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( @build_decision_book_project_people_route.post(
path="/list", summary="List Active/Delete/Confirm Build Decision Book People" 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) token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(list_options=list_options, token_dict=token_dict) 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", path="/create",
summary="Create Build Decision Book Project People with given auth levels", 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) token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event(data=data, token_dict=token_dict) 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", summary="Add people to Build Decision People Book with given auth levels",
) )
def build_decision_book_project_people_update( 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) token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event( return token_dict.available_event(
data=data, data=data,
build_decision_book_project_person_uu_id=build_decision_book_project_person_uu_id, 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", summary="Patch people from Build Decision Book Project People with given auth levels",
) )
def build_decision_book_project_people_patch( 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) token_dict = parse_token_object_to_dict(request=request)
return token_dict.available_event( return token_dict.available_event(
data=data, data=data,
build_decision_book_project_person_uu_id=build_decision_book_project_person_uu_id, 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() created_build_type.save_and_confirm()
insert_enums = [ 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", "enum_class": "BuildDuesTypes",
"type_code": "BDT-A", "type_code": "BDT-A",
@ -217,7 +213,28 @@ def init_api_enums_build_types():
"type_code": "DT-Z", "type_code": "DT-Z",
"type_name": "Zero Balance", "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: for insert_enum in insert_enums:
created_api_enum = ApiEnumDropdown.find_or_create( created_api_enum = ApiEnumDropdown.find_or_create(
enum_class=insert_enum["enum_class"], 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_name=duty_object.duty_name,
service_description=duty_object.duty_description, service_description=duty_object.duty_description,
service_code=f"SRE-{duty_object.duty_code}", service_code=f"SRE-{duty_object.duty_code}",
related_responsibility=duty_object.duty_code,
) )
created_service.save_and_confirm() created_service.save_and_confirm()
@ -255,6 +256,7 @@ def create_modules_and_services_and_actions():
service_name=occupant_type.occupant_type, service_name=occupant_type.occupant_type,
service_description=occupant_type.occupant_description, service_description=occupant_type.occupant_description,
service_code=f"SRO-{occupant_type.occupant_code}", service_code=f"SRO-{occupant_type.occupant_code}",
related_responsibility=occupant_type.occupant_code,
) )
created_service.save_and_confirm() 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_meeting(module_dict=build_module_module_dict)
create_services_building(module_dict=build_module_module_dict) create_services_building(module_dict=build_module_module_dict)
create_services_flat(module_dict=build_module_module_dict) create_services_flat(module_dict=build_module_module_dict)
Modules.save()
return return
# #
# super_admin_module_created=None # super_admin_module_created=None

View File

@ -1,4 +1,3 @@
from api_validations.validations_request import ( from api_validations.validations_request import (
InsertBuildDecisionBookProjectItems, InsertBuildDecisionBookProjectItems,
UpdateBuildDecisionBookProjects, UpdateBuildDecisionBookProjects,
@ -8,7 +7,9 @@ from api_validations.validations_request import (
def generate_update_project_item(**kwargs): def generate_update_project_item(**kwargs):
return { 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), "is_out_sourced": kwargs.get("is_out_sourced", False),
"project_note": kwargs.get("project_note", None), "project_note": kwargs.get("project_note", None),
# "decision_book_pdf_path": str(kwargs.get("decision_book_pdf_path", None)), # "decision_book_pdf_path": str(kwargs.get("decision_book_pdf_path", None)),
@ -24,24 +25,28 @@ def generate_update_project_item(**kwargs):
def generate_approval_project_item(**kwargs): def generate_approval_project_item(**kwargs):
return { return {
"build_decision_book_project_uu_id": kwargs.get("build_decision_book_project_uu_id", None), "build_decision_book_project_uu_id": kwargs.get(
"final_price_list": kwargs.get("final_price_list", []), "build_decision_book_project_uu_id", None
),
"final_price_list": kwargs.get("final_price_list", None),
"project_stop_date": kwargs.get("project_stop_date", None), "project_stop_date": kwargs.get("project_stop_date", None),
"status_code": kwargs.get("status_code", None),
} }
def generate_insert_project_item(**kwargs): def generate_insert_project_item(**kwargs):
return { 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_header": kwargs.get("item_header", ""),
"item_comment": kwargs.get("item_comment", ""), "item_comment": kwargs.get("item_comment", ""),
} }
def create_decision_book_items(requester, insert_project_item): def create_decision_book_project_items(requester, insert_project_item):
response = requester.post( response = requester.post(
endpoint="/build/decision_book/project/items/create", endpoint="/build/decision_book/project/items/create", data=insert_project_item
data=insert_project_item
) )
print("text", response.text) print("text", response.text)
print("json", response.json()) print("json", response.json())
@ -50,8 +55,7 @@ def create_decision_book_items(requester, insert_project_item):
def update_decision_book_project(requester, update_project_item): def update_decision_book_project(requester, update_project_item):
response = requester.post( response = requester.post(
endpoint="/build/decision_book/project/update", endpoint="/build/decision_book/project/update", data=update_project_item
data=update_project_item
) )
print("text", response.text) print("text", response.text)
print("json", response.json()) print("json", response.json())
@ -59,8 +63,20 @@ def update_decision_book_project(requester, update_project_item):
def approve_build_decision_book_project_approval(requester, approval_project_item): def approve_build_decision_book_project_approval(requester, approval_project_item):
response = requester.post( response = requester.post(
endpoint="/build/decision_book/project/approval", endpoint="/build/decision_book/project/approval", data=approval_project_item
data=approval_project_item
) )
print("text", response.text) print("text", response.text)
print("json", response.json()) print("json", response.json())
def list_decision_book_project(requester, project_no):
response = requester.post(
endpoint="/build/decision_book/project/list",
data={"query": {"project_no": project_no}},
)
print("text", response.text)
print("json", response.json())
response_json = response.json()
# project = response_json["data"][0]["uu_id"]
project = response_json["data"][0]
return project

View File

@ -1,16 +1,25 @@
import json
import arrow import arrow
from service_app_test.bases import RequestToApi from service_app_test.bases import RequestToApi
from service_app_test.api_configs import LocalAPI, BothAPIS from service_app_test.api_configs import LocalAPI, BothAPIS
from service_app_test.test_application.evyos.decision_book import ( 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 ( from service_app_test.test_application.evyos.decision_book_items import (
send_invitation_to_building_residents, send_invitation_to_building_residents,
collect_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.people import migrate_people
from service_app_test.test_application.migrate_old_data.building import ( from service_app_test.test_application.migrate_old_data.building import (
migrate_build, migrate_build,
@ -20,9 +29,29 @@ from service_app_test.test_application.migrate_old_data.company import migrate_c
from service_app_test.test_application.migrate_old_data.accounts import ( from service_app_test.test_application.migrate_old_data.accounts import (
migrate_account_records, 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_project_items,
generate_insert_project_item,
generate_update_project_item,
generate_approval_project_item,
list_decision_book_project,
)
local_api = RequestToApi()
local_api.overwrite_base_url(base_url=LocalAPI.base_url)
both_apis = BothAPIS()
both_apis.local_api = local_api
password_token = "g17Anw5yBvrASMXtES8olfE8vN32R-U7wO_g8kbhjK8C67ww7fv39Mp3ygjouDw8UrwFJhemqFwbEIi2XzIN1u_rq4nmUSROZAnL3NyhczfizMZml0Rd84HWFA80Z1WpIsOadRlGVN77rr3OrrfYXfp1Fa6f_LsiTj0m3N-ie6Mr-4NIQ-3g25Z4oCD4Up6o" def decode_as_json_indent(data):
return json.dumps(json.loads(json.dumps(data)), indent=2)
password_token = "FGS095it2IBP3gIp5glaG6u9tQy1KEPzKnBYE1fvGJSGvGUhwaGgxE-56yZAxUQnW-a_J91twOFKTWTc0ue4GZq10vY7fK2cZBsR9bUDJMCHZZZGpFYbsE6pLyaDs-1_K8v5hbggSmpXNFfafMmujuXxqvSzdLQa5hcg9qepHBOvgTbL28wGRHx9w-Fcb7bL"
password_token_occ = "kM9vHcWZVVF38IyNxMk6XMlCc8FCc_P1D-0D2u-Er5FrcQzvswSjJe9Lu9QnhJ5fJw5WqC45UYxopme_aCX6YDfZfQ3wQ9RP4Ak5YYTWBZbtwKGXTomlpYCQJghy0RC-1-Q9ATNEgcjYXqU2P9UjjdS9JNvhUawT0R38wXap-Mum6oazjqiKow41SUebnZ-H"
login_data = { login_data = {
"domain": "evyos.com.tr", "domain": "evyos.com.tr",
"access_key": "karatay.berkay.sup@evyos.com.tr", "access_key": "karatay.berkay.sup@evyos.com.tr",
@ -30,80 +59,36 @@ login_data = {
"remember_me": False, "remember_me": False,
"password_token": password_token, "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 = { login_creds_occupant = {
"domain": "evyos.com.tr", "domain": "evyos.com.tr",
"access_key": access_key_president, "access_key": "mehmet.karatay@hotmail.com",
"password": "string", "password": "string",
"remember_me": False, "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 = [ selection_list = [
"68b5e3d9-c546-4ebd-98f5-df468f20cc54", "d9ffa716-331c-48fc-83b2-47bf31289b3e",
"da2a282c-7053-4cdf-bca5-c41f548883cc", "afebb7f8-9f62-4703-b11c-ee8f14fe73b7",
]
# 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",
] ]
manager_token = "g0Z1YYjh2WqFfoI3MdJ9wrfXAHeL6f7UatEkySzOK0dFX6CH1sXgjQ"
people_uu_id = "2c8781f6-c1bc-432d-bb0c-9f5247ecc750"
list_of_attendees = [ list_of_attendees = [
"zFhY5z05ixUxvryeGYPdchUDYhIoatghz06bb74FwJuMyrH1w4JVQw", "_Ky6UyaoatH5CZEQHZ1gdoj_7HDxSJ2DgBwq6hSXbCKR-WG8E9DPuQ",
"wlm0VNMnUDj91B8HLWQE9vKZsOIPcYQlHZqmgV_U_ywIOXFxR7RDxw", "KhdJF7XP6ni_qdIRXSByGHKez8oTSbmzOAZxdi2A_iy-oOW6-VbfPA",
"2ckn8Jp7r0xgHqdExk82SQVUhekwSMNI6Yvd1ESV6LD4769kyeso2g", "vn01wNh5moTiNzw2qOvT4h5eqgCQ10jmN3OK659NN-ekriFSmVju_Q",
"6iY_p1JkptCj1JeptEUokw5BzxtcgQ3tHYkF2Vud9Cl1uzO3TJZmnQ", "EMsteygK4Myingptlpi_sr7Xu0Wsrl7xpQD-ukVY4GBjv6NJakpQ4Q",
"jaOQodhZaDcEJ8_1Y2hjOlKk3f5SiaYfYU-xqDlervLdeYgHumkniw", "26p4QD1CofK6-Pk_VyDOB2Xstdv_sx88kh4kResWg4TuCuAy7tAT-A",
"2iPk5lcTYdl_-S7odsLbN8Kij20pVNHmGSDC6gIJHIIRQ74JitP_LA", "2FgntLgLfFM20d32-gOwaHu44Vk_fDlpOh8IvS8gahiW-V0Dv0qLWg",
"cl82VDi7xQNO77v3CC7X8wcQ4i_C-K9uuKZyqnvh4KHi0ciwqXyOKA", "TwC_dNuT6Iln0NFinEuvxbnjmb_HwcS8qWg-097gjc8pHTQ1p0nTGA",
"UTHZNg9gx0lZ4laDUz7S5xQ5e83vxrufqp7PbPCJx29AxhzX9DL62A", "Yn35HP9TJonn9PTFpsq1lH3w-x-zHjTWymBeP6v4XPcwJP_aMj8JsQ",
"rwlasXNiQXXxfRBXv78DkQeSS1S3ubV0ulrXK8cZgmCDkHAIoWvU0w", "C2DbYn1jcocKwjQ8gvJ_jCU0IGAmbJB3JgHj-N_OTu1jNtmhVrW7aQ",
"JgAVc5U5lsfrbSx1gx0_SYQcO0q_K2HX8Vir5SIdiM-Z-PuHAG5cRg", "TT5-9a_JVSf_WBAcN1sAfUyV45J2e7J1NoVGe3BcrrlAI1GNoU2_rw",
"V_rSldMaE9P_-uEfSsyh1ojEYep4Xma3NY7BIKzuicj_wEkCqFramw", "ED4H5zpmxpLXX5rO6eoTb7wIa2x1v0YbNwsFh-iAohWh7fDyhvq_BQ",
] ]
living_space_data = dict( constant = "Toplantı sonucunda araştırmalar tamamlandı, katılımcılara e-posta gönderildi. Onaylayan sayısı yeterli olmadığı için karar alınamadı ve proje iptal edildi ve sonlandırıldı."
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__(),
)
assign_people_to_create_item = 4
if assign_people_to_create_item == -1: if assign_people_to_create_item == -1:
local_api.selected_object = local_api.login_via_email_and_password( local_api.selected_object = local_api.login_via_email_and_password(
login_data=login_data, is_password_valid=False login_data=login_data, is_password_valid=False
@ -113,15 +98,44 @@ if assign_people_to_create_item == -1:
migrate_build(requester=both_apis) migrate_build(requester=both_apis)
migrate_build_living_space(requester=both_apis) migrate_build_living_space(requester=both_apis)
# migrate_account_records(requester=both_apis) # migrate_account_records(requester=both_apis)
if assign_people_to_create_item == 0: if assign_people_to_create_item == 0:
if not bool(selection_list): if not bool(selection_list):
local_api.selected_object = local_api.login_via_email_and_password( local_api.selected_object = local_api.login_via_email_and_password(
login_data=login_data, is_password_valid=True login_data=login_data, is_password_valid=True
) )
response = local_api.post(endpoint="/building/living_space/create", data=living_space_data) occupant_manager = get_occupants_types(
print('response', response.text) 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( local_api.selected_object = local_api.login_via_email_and_password(
login_data=login_creds_occupant, login_data=login_creds_occupant,
@ -159,31 +173,33 @@ elif assign_people_to_create_item == 2:
selection_list=selection_list, selection_list=selection_list,
) )
assign_people_to_pre_or_wrt( assign_people_to_pre_or_wrt(
person_uu_id=people_uu_id_list[0], person_uu_id=people_uu_id,
manager_token=manager_token, manager_token=manager_token,
occupant_code="MT-VPR", occupant_code="MT-VPR",
requester=both_apis.local_api, requester=both_apis.local_api,
) )
assign_people_to_pre_or_wrt( assign_people_to_pre_or_wrt(
person_uu_id=people_uu_id_list[1], person_uu_id=people_uu_id,
manager_token=manager_token, manager_token=manager_token,
occupant_code="MT-WRT", occupant_code="MT-WRT",
requester=both_apis.local_api, requester=both_apis.local_api,
) )
assign_people_to_pre_or_wrt( assign_people_to_pre_or_wrt(
person_uu_id=people_uu_id_list[2], person_uu_id=people_uu_id,
manager_token=manager_token, manager_token=manager_token,
occupant_code="MT-PRS", occupant_code="MT-PRS",
requester=both_apis.local_api, requester=both_apis.local_api,
) )
elif assign_people_to_create_item == 3: elif assign_people_to_create_item == 3:
local_api.selected_object = local_api.login_via_email_and_password( 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, is_password_valid=True,
selection_list=selection_list, 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) print("select_company_uu_id", local_api.selected_object)
is_fixed_price = False is_fixed_price = False
@ -200,100 +216,206 @@ elif assign_people_to_create_item == 3:
)["data"]["uu_id"] )["data"]["uu_id"]
run_decision_book_items( run_decision_book_items(
writers_token=writers_token, writers_token=manager_token,
info_type_uu_id=info_type_reno_uu_id, 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 " 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, start_date=start_date,
end_date=end_date, end_date=end_date,
requester=both_apis.local_api requester=both_apis.local_api,
) )
unit_price = 17.04 unit_price = 17.04
run_decision_book_items( run_decision_book_items(
writers_token=writers_token, writers_token=manager_token,
info_type_uu_id=info_type_deb_uu_id, 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 " 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, unit_price=unit_price,
requester=both_apis.local_api requester=both_apis.local_api,
) )
run_decision_book_items( run_decision_book_items(
writers_token=writers_token, writers_token=manager_token,
info_type_uu_id=info_type_reno_uu_id, 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 " 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, start_date=start_date,
end_date=end_date, end_date=end_date,
requester=both_apis.local_api requester=both_apis.local_api,
) )
run_decision_book_items( run_decision_book_items(
writers_token=writers_token, writers_token=manager_token,
info_type_uu_id=info_type_reno_uu_id, 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 " 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, start_date=start_date,
end_date=end_date, end_date=end_date,
requester=both_apis.local_api requester=both_apis.local_api,
) )
run_decision_book_items( run_decision_book_items(
writers_token=writers_token, writers_token=manager_token,
info_type_uu_id=info_type_reno_uu_id, info_type_uu_id=info_type_reno_uu_id,
item_comment="Dogalgazdan tadilatında çıkan eski boruların satışının yapılmasına.", item_comment="Dogalgazdan tadilatında çıkan eski boruların satışının yapılmasına.",
start_date=start_date, start_date=start_date,
end_date=end_date, end_date=end_date,
requester=both_apis.local_api requester=both_apis.local_api,
) )
run_decision_book_items( run_decision_book_items(
writers_token=writers_token, writers_token=manager_token,
info_type_uu_id=info_type_reno_uu_id, 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 " 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 " "sayaç il panoların kutuya konulmasına, doğalgaz borularının astar boya ile "
"boyanmasına teklif alınarak projec açılması.", "boyanmasına teklif alınarak projec açılması.",
start_date=start_date, start_date=start_date,
end_date=end_date, end_date=end_date,
requester=both_apis.local_api requester=both_apis.local_api,
) )
run_decision_book_items( run_decision_book_items(
writers_token=writers_token, writers_token=manager_token,
info_type_uu_id=info_type_reno_uu_id, 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ı " 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, start_date=start_date,
end_date=end_date, end_date=end_date,
requester=both_apis.local_api requester=both_apis.local_api,
) )
run_decision_book_items( run_decision_book_items(
writers_token=writers_token, writers_token=manager_token,
info_type_uu_id=info_type_reno_uu_id, info_type_uu_id=info_type_reno_uu_id,
item_comment="Bina su deposunun temizletilmesi.", item_comment="Bina su deposunun temizletilmesi.",
start_date=start_date, start_date=start_date,
end_date=end_date, end_date=end_date,
requester=both_apis.local_api requester=both_apis.local_api,
) )
run_decision_book_items( run_decision_book_items(
writers_token=writers_token, writers_token=manager_token,
info_type_uu_id=info_type_reno_uu_id, 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ı.", item_comment="Çatının havalandırma camlarının değiştirilmesi ve onarılması.",
start_date=start_date, start_date=start_date,
end_date=end_date, end_date=end_date,
requester=both_apis.local_api requester=both_apis.local_api,
) )
run_decision_book_items( run_decision_book_items(
writers_token=writers_token, writers_token=manager_token,
info_type_uu_id=info_type_inf_uu_id, info_type_uu_id=info_type_inf_uu_id,
item_comment="Arka zemin daire sahibinin yoğun yağmurlarda evin su basmaması için " item_comment="Arka zemin daire sahibinin yoğun yağmurlarda evin su basmaması için "
"arka bölüme saçak yapabilmesine onay verildi.", "arka bölüme saçak yapabilmesine onay verildi.",
requester=both_apis.local_api requester=both_apis.local_api,
)
elif assign_people_to_create_item == 4:
local_api.selected_object = local_api.login_via_email_and_password(
login_data=login_creds_occupant,
is_password_valid=True,
selection_list=selection_list,
)
# for i in range(8):
# index = i + 1
# print("index", index)
# if index in [1, 7, 8]:
# continue
# project_no = f"BDT-R_2024_{index}"
# project = list_decision_book_project(
# requester=both_apis.local_api, project_no=project_no
# )
# print("project", decode_as_json_indent(project))
# project_uu_id = project["uu_id"]
#
# insert_project_item = generate_insert_project_item(
# **{
# "build_decision_book_project_uu_id": project_uu_id,
# "item_header": "Toplantı sonrası alınan kararlar",
# "item_comment": constant,
# }
# )
# create_decision_book_project_items(
# insert_project_item=insert_project_item, requester=both_apis.local_api
# )
# approve_project_item = {
# "build_decision_book_project_uu_id": project_uu_id,
# "project_stop_date": "2024-12-01",
# "status_code": 9
# }
# approve_build_decision_book_project_approval(
# approval_project_item=generate_approval_project_item(**approve_project_item),
# requester=both_apis.local_api,
# )
#
# project = list_decision_book_project(
# requester=both_apis.local_api, project_no=project_no
# )
# print("project", decode_as_json_indent(project))
project_no = f"BDT-R_2024_7"
project = list_decision_book_project(
requester=both_apis.local_api, project_no=project_no
)
print("project", decode_as_json_indent(project))
project_uu_id = project["uu_id"]
approve_project_item = lambda final_price_list : {
"build_decision_book_project_uu_id": project_uu_id,
"project_stop_date": "2024-12-01",
"final_price_list": final_price_list,
"status_code": 9
}
approve_project_dict = approve_project_item(
[{"date": "2024-11-03", "price": 585.00}]
)
insert_project_item = generate_insert_project_item(
**{
"build_decision_book_project_uu_id": project_uu_id,
"item_header": "Toplantı sonrası alınan kararlar",
"item_comment": "Bina çalışmaları sonucunda 7020 ₺ lik maliyet çıkmıştır.",
}
)
create_decision_book_project_items(
insert_project_item=insert_project_item, requester=both_apis.local_api
)
approve_build_decision_book_project_approval(
approval_project_item=generate_approval_project_item(**approve_project_dict),
requester=both_apis.local_api,
) )
elif assign_people_to_create_item == 4: project = list_decision_book_project(
pass requester=both_apis.local_api, project_no=project_no
)
print("project", decode_as_json_indent(project))
project_no = f"BDT-R_2024_8"
project = list_decision_book_project(
requester=both_apis.local_api, project_no=project_no
)
print("project", decode_as_json_indent(project))
project_uu_id = project["uu_id"]
approve_project_dict = approve_project_item(
[{"date": "2024-12-01", "price": 600.25}, {"date": "2025-01-01", "price": 600.50}]
)
insert_project_item = generate_insert_project_item(
**{
"build_decision_book_project_uu_id": project_uu_id,
"item_header": "Toplantı sonrası alınan kararlar",
"item_comment": "Bina çalışmaları sonucunda 12500 ₺ lik maliyet çıkmıştır.",
}
)
create_decision_book_project_items(
insert_project_item=insert_project_item, requester=both_apis.local_api
)
approve_build_decision_book_project_approval(
approval_project_item=generate_approval_project_item(**approve_project_dict),
requester=both_apis.local_api,
)
project = list_decision_book_project(
requester=both_apis.local_api, project_no=project_no
)
print("project", decode_as_json_indent(project))