project budget updated

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

View File

@ -0,0 +1 @@

View File

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

View File

@ -3,6 +3,9 @@ import typing
from fastapi import status, HTTPException from fastapi 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,23 +267,55 @@ 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()
return book_project_created return book_project_created
@ -332,7 +366,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 +376,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 +384,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 +395,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 +412,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 +433,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 +464,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,29 +30,37 @@ 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):
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="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
decision_book_ids = [_.build_decision_book_project_id for _ in project_person.data] if not build_decision_book:
raise BuildDecisionBookProjects.raise_http_exception(
status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND",
message="Build decision book not found",
data={},
)
BuildDecisionBookProjects.filter_attr = list_options
decision_book_projects = BuildDecisionBookProjects.filter_all( 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",
@ -72,44 +79,44 @@ class ProjectDecisionBookCreateEventMethods(MethodToEvent):
@classmethod @classmethod
def project_decision_book_create( def project_decision_book_create(
cls, cls,
data: InsertBuildDecisionBookProjects, data: InsertBuildDecisionBookProjects,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject], token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
): ):
if isinstance(token_dict, EmployeeTokenObject): if isinstance(token_dict, EmployeeTokenObject):
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="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",
@ -128,62 +135,65 @@ class ProjectDecisionBookUpdateEventMethods(MethodToEvent):
@classmethod @classmethod
def project_decision_book_update( def project_decision_book_update(
cls, cls,
data: UpdateBuildDecisionBookProjects, data: UpdateBuildDecisionBookProjects,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject], token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
): ):
if isinstance(token_dict, EmployeeTokenObject): if isinstance(token_dict, EmployeeTokenObject):
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="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"), BuildDecisionBookProjects.build_decision_book_project_uu_id
BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id, == data.get("build_decision_book_project_uu_id"),
BuildDecisionBookProjects.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)
@ -204,66 +214,68 @@ class ProjectDecisionBookApprovalEventMethods(MethodToEvent):
@classmethod @classmethod
def project_decision_book_approval( def project_decision_book_approval(
cls, cls,
data: ApprovalsBuildDecisionBookProjects, data: ApprovalsBuildDecisionBookProjects,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject], token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
): ):
if isinstance(token_dict, EmployeeTokenObject): if isinstance(token_dict, EmployeeTokenObject):
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="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( BuildDecisionBookProjects.build_decision_book_project_uu_id
"build_decision_book_project_uu_id"), == data.get("build_decision_book_project_uu_id"),
BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id, BuildDecisionBookProjects.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,
).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 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,7 +283,8 @@ 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(
@ -283,7 +296,9 @@ class ProjectDecisionBookApprovalEventMethods(MethodToEvent):
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:
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(
@ -320,36 +335,25 @@ class ProjectDecisionBookPatchEventMethods(MethodToEvent):
@classmethod @classmethod
def project_decision_book_patch( def project_decision_book_patch(
cls, cls,
data, data,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject], token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
): ):
return return
ProjectDecisionBookListEventMethod = ( ProjectDecisionBookListEventMethod = ProjectDecisionBookListEventMethods(
ProjectDecisionBookListEventMethods( action=ActionsSchema(endpoint="/build/decision_book/project/list")
action=ActionsSchema(endpoint="/build/decision_book/project/person/list")
)
) )
ProjectDecisionBookCreateEventMethod = ( ProjectDecisionBookCreateEventMethod = ProjectDecisionBookCreateEventMethods(
ProjectDecisionBookCreateEventMethods( action=ActionsSchema(endpoint="/build/decision_book/project/create")
action=ActionsSchema(endpoint="/build/decision_book/project/create")
)
) )
ProjectDecisionBookUpdateEventMethod = ( ProjectDecisionBookUpdateEventMethod = ProjectDecisionBookUpdateEventMethods(
ProjectDecisionBookUpdateEventMethods( action=ActionsSchema(endpoint="/build/decision_book/project/update")
action=ActionsSchema(endpoint="/build/decision_book/project/update")
)
) )
ProjectDecisionBookApprovalEventMethod = ( ProjectDecisionBookApprovalEventMethod = ProjectDecisionBookApprovalEventMethods(
ProjectDecisionBookApprovalEventMethods( action=ActionsSchema(endpoint="/build/decision_book/project/approval")
action=ActionsSchema(endpoint="/build/decision_book/project/approval")
)
) )
ProjectDecisionBookPatchEventMethod = ( ProjectDecisionBookPatchEventMethod = ProjectDecisionBookPatchEventMethods(
ProjectDecisionBookPatchEventMethods( action=ActionsSchema(endpoint="/build/decision_book/project/patch")
action=ActionsSchema(endpoint="/build/decision_book/project/patch")
)
) )

View File

@ -76,7 +76,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

@ -26,28 +26,33 @@ 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):
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="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,
) )
@ -62,21 +67,23 @@ class ProjectDecisionBookPersonCreateEventMethods(MethodToEvent):
@classmethod @classmethod
def project_decision_book_create( def project_decision_book_create(
cls, cls,
data: InsertBuildDecisionBookProjectPerson, data: InsertBuildDecisionBookProjectPerson,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject], token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
): ):
if isinstance(token_dict, EmployeeTokenObject): if isinstance(token_dict, EmployeeTokenObject):
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="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",
@ -95,21 +102,23 @@ class ProjectDecisionBookPersonUpdateEventMethods(MethodToEvent):
@classmethod @classmethod
def project_decision_book_update( def project_decision_book_update(
cls, cls,
data: UpdateBuildDecisionBookProjectPerson, data: UpdateBuildDecisionBookProjectPerson,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject], token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
): ):
if isinstance(token_dict, EmployeeTokenObject): if isinstance(token_dict, EmployeeTokenObject):
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="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(
@ -129,21 +138,23 @@ class ProjectDecisionBookPersonPatchEventMethods(MethodToEvent):
@classmethod @classmethod
def project_decision_book_patch( def project_decision_book_patch(
cls, cls,
data, data,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject], token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
): ):
if isinstance(token_dict, EmployeeTokenObject): if isinstance(token_dict, EmployeeTokenObject):
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="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,10 +163,8 @@ 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(
@ -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

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"},
) )
@ -1201,13 +1196,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 +1233,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,7 +43,9 @@ 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)

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)
@ -39,15 +45,15 @@ def build_decision_book_project_people_items_create(request: Request, data: Inse
summary="Add people to Decision Project Book Project Items with given auth levels", summary="Add people to Decision Project Book Project Items with given auth levels",
) )
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,
) )
@ -56,11 +62,11 @@ def build_decision_book_project_people_items_update(
summary="Patch people from Decision Project Book Project Items with given auth levels", summary="Patch people from Decision Project Book Project Items with given auth levels",
) )
def build_decision_book_project_people_items_patch( def build_decision_book_project_people_items_patch(
request: Request, build_decision_book_project_item_uu_id:str, data request: Request, build_decision_book_project_item_uu_id: str, data
): ):
token_dict = parse_token_object_to_dict(request=request) 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,
) )

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,7 +25,9 @@ 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(
"build_decision_book_project_uu_id", None
),
"final_price_list": kwargs.get("final_price_list", []), "final_price_list": kwargs.get("final_price_list", []),
"project_stop_date": kwargs.get("project_stop_date", None), "project_stop_date": kwargs.get("project_stop_date", None),
} }
@ -32,7 +35,9 @@ def generate_approval_project_item(**kwargs):
def generate_insert_project_item(**kwargs): 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", ""),
} }
@ -40,8 +45,7 @@ def generate_insert_project_item(**kwargs):
def create_decision_book_items(requester, insert_project_item): def create_decision_book_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 +54,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 +62,7 @@ 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())

View File

@ -3,14 +3,21 @@ 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 +27,23 @@ from service_app_test.test_application.migrate_old_data.company import migrate_c
from service_app_test.test_application.migrate_old_data.accounts import ( 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_items,
generate_insert_project_item,
generate_update_project_item,
generate_approval_project_item,
)
local_api = RequestToApi()
local_api.overwrite_base_url(base_url=LocalAPI.base_url)
password_token = "g17Anw5yBvrASMXtES8olfE8vN32R-U7wO_g8kbhjK8C67ww7fv39Mp3ygjouDw8UrwFJhemqFwbEIi2XzIN1u_rq4nmUSROZAnL3NyhczfizMZml0Rd84HWFA80Z1WpIsOadRlGVN77rr3OrrfYXfp1Fa6f_LsiTj0m3N-ie6Mr-4NIQ-3g25Z4oCD4Up6o" both_apis = BothAPIS()
both_apis.local_api = local_api
password_token = ""
password_token_occ = ""
login_data = { 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 +51,23 @@ 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", # "523dbcd3-fe87-4208-86c2-da45204dfafc",
"da2a282c-7053-4cdf-bca5-c41f548883cc", # "24aed2e5-bca0-4657-a056-badf9b3aa81c",
]
# 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",
] ]
list_of_attendees = [ manager_token = ""
"zFhY5z05ixUxvryeGYPdchUDYhIoatghz06bb74FwJuMyrH1w4JVQw", people_uu_id = ""
"wlm0VNMnUDj91B8HLWQE9vKZsOIPcYQlHZqmgV_U_ywIOXFxR7RDxw", list_of_attendees = []
"2ckn8Jp7r0xgHqdExk82SQVUhekwSMNI6Yvd1ESV6LD4769kyeso2g",
"6iY_p1JkptCj1JeptEUokw5BzxtcgQ3tHYkF2Vud9Cl1uzO3TJZmnQ",
"jaOQodhZaDcEJ8_1Y2hjOlKk3f5SiaYfYU-xqDlervLdeYgHumkniw",
"2iPk5lcTYdl_-S7odsLbN8Kij20pVNHmGSDC6gIJHIIRQ74JitP_LA",
"cl82VDi7xQNO77v3CC7X8wcQ4i_C-K9uuKZyqnvh4KHi0ciwqXyOKA",
"UTHZNg9gx0lZ4laDUz7S5xQ5e83vxrufqp7PbPCJx29AxhzX9DL62A",
"rwlasXNiQXXxfRBXv78DkQeSS1S3ubV0ulrXK8cZgmCDkHAIoWvU0w",
"JgAVc5U5lsfrbSx1gx0_SYQcO0q_K2HX8Vir5SIdiM-Z-PuHAG5cRg",
"V_rSldMaE9P_-uEfSsyh1ojEYep4Xma3NY7BIKzuicj_wEkCqFramw",
]
living_space_data = dict(
build_parts_uu_id="68b5e3d9-c546-4ebd-98f5-df468f20cc54",
person_uu_id="dc135536-086f-4e11-af3a-02c7cf65f265",
occupant_type_uu_id="a47372a9-67da-4dfb-82a9-51f9ca15ef63",
expiry_starts=arrow.now().date().__str__(),
)
assign_people_to_create_item = -1
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 +77,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 +152,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 +195,126 @@ 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: elif assign_people_to_create_item == 4:
pass # project_lead_creds_occupant = {
# "domain": "evyos.com.tr",
# "access_key": "",
# "password": "string",
# "remember_me": False,
# "password_token": "",
# }
local_api.selected_object = local_api.login_via_email_and_password(
login_data=login_creds_occupant,
is_password_valid=True,
selection_list=selection_list,
)
response = both_apis.local_api.post(
endpoint="/build/decision_book/project/list",
data={"query": {"project_no": "BDT-R_2024_1"}},
)
print("text", response.text)
print("json", response.json())
response_json = response.json()
project_uu_id = response_json["data"][0]["uu_id"]
print("project_uu_id", project_uu_id)
exit()
selected_decision_book_uu_id = list_decision_books(requester=both_apis.local_api)[
"data"
][0]["uu_id"]
print("select_company_uu_id", local_api.selected_object)