From 0b3e0c299c829a64322dca1336a31f24976150c5 Mon Sep 17 00:00:00 2001 From: berkay Date: Wed, 20 Nov 2024 12:04:02 +0300 Subject: [PATCH] project budget updated --- a_project_files/drafts_and_notes/deneme.py | 1 + a_project_files/drafts_and_notes/mdemeler.txt | 30 +++ .../decision_book_decision_book_items.py | 86 +++++-- .../decision_book_decision_book_person.py | 7 +- .../decision_book_invitations.py | 7 +- .../decision_book/project_decision_book.py | 168 +++++++------ .../project_decision_book_items.py | 2 +- .../project_decision_book_person.py | 75 +++--- api_events/tasks2events/__init__.py | 14 ++ .../occupant_tasks/project_employee.py | 1 - .../occupant_tasks/project_finance.py | 1 - .../occupant_tasks/project_leader.py | 1 + .../project_decision_book.py | 2 +- databases/__init__.py | 14 ++ databases/sql_models/account/account.py | 96 +++++++ databases/sql_models/building/budget.py | 157 ++++++++++++ databases/sql_models/building/build.py | 2 +- .../sql_models/building/decision_book.py | 29 +-- service_app/routers/__init__.py | 12 + .../project_decision_book/router.py | 12 +- .../project_decision_book_items/router.py | 26 +- .../project_decision_book_person/router.py | 20 +- service_app_init/initialize_app/initiator.py | 27 +- .../modules_and_services_init.py | 3 +- .../migrate_old_data/decision_book_project.py | 22 +- .../migrate_old_data/runner.py | 237 ++++++++++-------- 26 files changed, 742 insertions(+), 310 deletions(-) create mode 100644 a_project_files/drafts_and_notes/deneme.py create mode 100644 a_project_files/drafts_and_notes/mdemeler.txt create mode 100644 databases/sql_models/building/budget.py diff --git a/a_project_files/drafts_and_notes/deneme.py b/a_project_files/drafts_and_notes/deneme.py new file mode 100644 index 0000000..d3f5a12 --- /dev/null +++ b/a_project_files/drafts_and_notes/deneme.py @@ -0,0 +1 @@ + diff --git a/a_project_files/drafts_and_notes/mdemeler.txt b/a_project_files/drafts_and_notes/mdemeler.txt new file mode 100644 index 0000000..030208a --- /dev/null +++ b/a_project_files/drafts_and_notes/mdemeler.txt @@ -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 diff --git a/api_events/events/decision_book/decision_book_decision_book_items.py b/api_events/events/decision_book/decision_book_decision_book_items.py index 5394c38..be69753 100644 --- a/api_events/events/decision_book/decision_book_decision_book_items.py +++ b/api_events/events/decision_book/decision_book_decision_book_items.py @@ -3,6 +3,9 @@ import typing from fastapi import status, HTTPException from fastapi.responses import JSONResponse +from api_events.events.events.events_bind_services import ( + ServiceBindOccupantEventMethods, +) from databases import ( Build, BuildParts, @@ -28,6 +31,7 @@ from api_validations.validations_request import ( ListOptions, ListDecisionBook, ) +from databases.sql_models.event.event import Services class DecisionBookDecisionBookItemsListEventMethods(MethodToEvent): @@ -178,7 +182,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): BuildParts.human_livable == True, BuildParts.build_id == build_id, ) - print('data_info_type.key', data_info_type.key) + print("data_info_type.key", data_info_type.key) book_payment_dict = dict( payment_plan_time_periods=str(data_info_type.key), build_decision_book_item_id=decision_book_item.id, @@ -228,12 +232,10 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): BuildDecisionBookProjects.build_decision_book_id == decision_book.id, BuildDecisionBookProjects.project_type == f"{decision_book.decision_type}_{data_info_type.key}", - system=True + system=True, ) management_room = BuildParts.filter_one( - BuildParts.build_id == build_id, - BuildParts.part_no == 0, - system=True + BuildParts.build_id == build_id, BuildParts.part_no == 0, system=True ).data occupant_man = OccupantTypes.filter_by_one( system=True, occupant_code="MT-VPR", occupant_category_type="MT" @@ -254,7 +256,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): project_start_date=str(local_date), project_stop_date=str(end_date), project_type=f"{decision_book.decision_type}_{data_info_type.key}", - project_note=f"Fill later", + project_note=str(decision_book_item.item_comment), build_decision_book_id=decision_book.id, build_decision_book_uu_id=str(decision_book.uu_id), build_decision_book_item_id=decision_book_item.id, @@ -265,23 +267,55 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): book_project_created = BuildDecisionBookProjects.find_or_create( **book_project_dict ) - print('book_project_created', book_project_created) + book_project_created.save_and_confirm() + print("book_project_created", book_project_created) + item_comment_at_database = decision_book_item.item_comment decision_book_item.update( item_comment=f"{book_project_created.project_no}_{book_project_created.project_name} " - f"is assigned to {occupant_man.occupant_description}" + f"is assigned to {occupant_man.occupant_description} | {item_comment_at_database}" ) decision_book_item.save_and_confirm() project_lead = OccupantTypes.filter_by_one( system=True, occupant_code="PRJ-LDR", occupant_category_type="PRJ" ).data + build_new_president = OccupantTypes.filter_by_one( + system=True, occupant_code="MT-VPR", occupant_category_type="MT" + ).data + + new_president = BuildLivingSpace.filter_one( + BuildLivingSpace.occupant_type == build_new_president.id, + BuildLivingSpace.build_parts_id == management_room.id, + ).data + + project_leader = BuildLivingSpace.filter_one( + BuildLivingSpace.occupant_type == project_lead.id, + BuildLivingSpace.build_parts_id == management_room.id, + BuildLivingSpace.person_id == new_president.person_id, + ).data + if not project_leader: + project_leader = BuildLivingSpace.find_or_create( + person_id=new_president.person_id, + person_uu_id=str(new_president.person_uu_id), + build_parts_id=management_room.id, + build_parts_uu_id=str(management_room.uu_id), + occupant_type=project_lead.id, + occupant_type_uu_id=str(project_lead.uu_id), + ) + project_leader.save_and_confirm() + related_service = Services.filter_by_one( + system=True, + related_responsibility=project_lead.occupant_code, + ).data + ServiceBindOccupantEventMethods.bind_services_occupant_system( + service_id=related_service.id, + build_living_space_id=project_leader.id, + ) project_person = BuildDecisionBookProjectPerson.find_or_create( build_decision_book_project_id=book_project_created.id, build_decision_book_project_uu_id=str(book_project_created.uu_id), - living_space_id=manager_living_space.id, - living_space_uu_id=str(manager_living_space.uu_id), - project_team_type_id=project_lead.id, - project_team_type_uu_id=str(project_lead.uu_id), + living_space_id=project_leader.id, + living_space_uu_id=str(project_leader.uu_id), ) project_person.save_and_confirm() return book_project_created @@ -332,7 +366,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): book_items = BuildDecisionBookItems.filter_all( BuildDecisionBookItems.build_decision_book_id == decision_book.id, - system=True + system=True, ) if int(book_items.count) < 3: BuildDecisionBookItems.check_meeting_is_valid_to_start_add_attendance( @@ -342,7 +376,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): book_items = BuildDecisionBookItems.filter_all( BuildDecisionBookItems.build_decision_book_id == decision_book.id, - system=True + system=True, ) data_dict["item_order"] = int(book_items.count) + 1 @@ -350,7 +384,9 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): data_dict["build_decision_book_uu_id"] = str(decision_book.uu_id) data_info_type = ApiEnumDropdown.filter_by_one( - system=True, enum_class="BuildDuesTypes", key="BDT-I", + system=True, + enum_class="BuildDuesTypes", + key="BDT-I", ).data data_info_types = ApiEnumDropdown.due_type_search() for info_type in data_info_types: @@ -359,8 +395,14 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): break row_is_debit = str(data_info_type.key).upper() in ["BDT-A", "BDT-D"] - row_is_project = str(data_info_type.key).upper() in ["BDT-R", "BDT-L", "BDT-S"] - debit_dates_required = not data_dict["debit_start_date"] or not data_dict["debit_end_date"] + row_is_project = str(data_info_type.key).upper() in [ + "BDT-R", + "BDT-L", + "BDT-S", + ] + debit_dates_required = ( + not data_dict["debit_start_date"] or not data_dict["debit_end_date"] + ) if row_is_project and debit_dates_required: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, @@ -370,7 +412,9 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): data_dict["info_type_id"] = data_info_type.id data_dict["info_type_uu_id"] = str(data_info_type.uu_id) - unit_price, unit_type = float(data_dict["unit_price"]), str(data_dict["unit_type"]) + unit_price, unit_type = float(data_dict["unit_price"]), str( + data_dict["unit_type"] + ) debit_start_date, debit_end_date = ( data_dict["debit_start_date"], @@ -389,7 +433,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): new_decision_book_item = BuildDecisionBookItems.find_or_create(**data_dict) new_decision_book_item.save_and_confirm() - print('new_decision_book_item', new_decision_book_item) + print("new_decision_book_item", new_decision_book_item) if created_payment_records_dict := cls.create_payment_records_for_each_build_part( data_info_type=data_info_type, build_id=decision_book.build_id, @@ -420,7 +464,9 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): new_decision_book_item.update(is_payment_created=True) elif row_is_project: project_no = str(created_payment_records_dict.project_no) - item_comment = f"{data.item_comment} | @ Project is created no : {project_no}." + item_comment = ( + f"{data.item_comment} | @ Project is created no : {project_no}." + ) new_decision_book_item.update(item_comment=item_comment) new_decision_book_item.update(is_payment_created=True) new_decision_book_item.save_and_confirm() diff --git a/api_events/events/decision_book/decision_book_decision_book_person.py b/api_events/events/decision_book/decision_book_decision_book_person.py index 88dceca..bc1d7c8 100644 --- a/api_events/events/decision_book/decision_book_decision_book_person.py +++ b/api_events/events/decision_book/decision_book_decision_book_person.py @@ -70,9 +70,7 @@ class DecisionBookPersonAddEventMethods(MethodToEvent): detail=f"No Decision Book is match with given UUID {data.build_decision_book_uu_id}", ) manager_occupant_type = OccupantTypes.filter_by_one( - system=True, - occupant_code="BU-MNG", - occupant_category_type="BU" + system=True, occupant_code="BU-MNG", occupant_category_type="BU" ).data if ( not manager_occupant_type.uu_id @@ -263,7 +261,8 @@ class DecisionBookPersonAssignOccupantEventMethods(MethodToEvent): ) assign_occupant_type = OccupantTypes.filter_by_one( - system=True, uu_id=data.occupant_type_uu_id, + system=True, + uu_id=data.occupant_type_uu_id, ).data if not assign_occupant_type: raise HTTPException( diff --git a/api_events/events/decision_book/decision_book_invitations.py b/api_events/events/decision_book/decision_book_invitations.py index 9971f2f..7d116ae 100644 --- a/api_events/events/decision_book/decision_book_invitations.py +++ b/api_events/events/decision_book/decision_book_invitations.py @@ -96,7 +96,9 @@ class BuildDecisionBookInvitationsCreateEventMethods(MethodToEvent): ) # Create an invitation for specific invitation type to start invite sending process - planned_date_expires = str(system_arrow.get(data.planned_date).shift(days=15).date()) + planned_date_expires = str( + system_arrow.get(data.planned_date).shift(days=15).date() + ) book_invitation = BuildDecisionBookInvitations.find_or_create( build_id=token_dict.selected_occupant.build_id, build_uu_id=token_dict.selected_occupant.build_uuid, @@ -199,7 +201,8 @@ class BuildDecisionBookInvitationsCreateEventMethods(MethodToEvent): BuildDecisionBookPerson.invite_id == book_invitation.id, BuildDecisionBookPerson.build_living_space_id.in_( [ - manager_living_space.id for manager_living_space in manager_living_spaces.data + manager_living_space.id + for manager_living_space in manager_living_spaces.data ] ), system=True, diff --git a/api_events/events/decision_book/project_decision_book.py b/api_events/events/decision_book/project_decision_book.py index 0acdfc0..55362e1 100644 --- a/api_events/events/decision_book/project_decision_book.py +++ b/api_events/events/decision_book/project_decision_book.py @@ -5,7 +5,7 @@ from databases import ( BuildDecisionBookProjects, BuildDecisionBookProjectPerson, BuildDecisionBookPayments, - OccupantTypes + OccupantTypes, ) from api_events.events.abstract_class import MethodToEvent, ActionsSchema @@ -17,13 +17,12 @@ from api_validations.validations_request import ( ListOptions, ) from api_validations.core_response import AlchemyJsonResponse -from databases import ( - Build, - BuildLivingSpace, - BuildParts, - ApiEnumDropdown +from databases import Build, BuildLivingSpace, BuildParts, ApiEnumDropdown +from databases.sql_models.building.decision_book import ( + BuildDecisionBookProjectItems, + BuildDecisionBookItems, + BuildDecisionBook, ) -from databases.sql_models.building.decision_book import BuildDecisionBookProjectItems, BuildDecisionBookItems class ProjectDecisionBookListEventMethods(MethodToEvent): @@ -31,29 +30,37 @@ class ProjectDecisionBookListEventMethods(MethodToEvent): event_type = "LIST" __event_keys__ = { - "96459b36-37f2-4d5b-8370-c459058d5bce": "project_decision_book_person_list", + "96459b36-37f2-4d5b-8370-c459058d5bce": "project_decision_book_list", } @classmethod - def project_decision_book_person_list( - cls, - data: ListOptions, - token_dict: Union[EmployeeTokenObject, OccupantTokenObject], + def project_decision_book_list( + cls, + list_options: ListOptions, + token_dict: Union[EmployeeTokenObject, OccupantTokenObject], ): if isinstance(token_dict, EmployeeTokenObject): raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_403_FORBIDDEN", error_case="NOT_ALLOWED", message="Employee cannot create project project decision book", - data={} + data={}, ) elif isinstance(token_dict, OccupantTokenObject): - project_person = BuildDecisionBookProjectPerson.filter_all( - BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id, - ) - decision_book_ids = [_.build_decision_book_project_id for _ in project_person.data] + build_decision_book = BuildDecisionBook.filter_one( + BuildDecisionBook.build_id == token_dict.selected_occupant.build_id, + ).data + if not build_decision_book: + raise BuildDecisionBookProjects.raise_http_exception( + status_code="HTTP_404_NOT_FOUND", + error_case="NOT_FOUND", + message="Build decision book not found", + data={}, + ) + BuildDecisionBookProjects.filter_attr = list_options decision_book_projects = BuildDecisionBookProjects.filter_all( - BuildDecisionBookProjects.build_decision_book_project_id.in_(decision_book_ids), + BuildDecisionBookProjects.build_decision_book_id + == build_decision_book.id, ) return AlchemyJsonResponse( status_code="HTTP_200_OK", @@ -72,44 +79,44 @@ class ProjectDecisionBookCreateEventMethods(MethodToEvent): @classmethod def project_decision_book_create( - cls, - data: InsertBuildDecisionBookProjects, - token_dict: Union[EmployeeTokenObject, OccupantTokenObject], + cls, + data: InsertBuildDecisionBookProjects, + token_dict: Union[EmployeeTokenObject, OccupantTokenObject], ): if isinstance(token_dict, EmployeeTokenObject): raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_403_FORBIDDEN", error_case="NOT_ALLOWED", message="Employee cannot create project project decision book", - data={} + data={}, ) elif isinstance(token_dict, OccupantTokenObject): living_space = BuildLivingSpace.filter_one( - BuildLivingSpace.living_space_id == token_dict.selected_occupant.living_space_id, + BuildLivingSpace.id == token_dict.selected_occupant.living_space_id, ).data if not living_space: raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_404_NOT_FOUND", error_case="NOT_FOUND", message="Living space not found", - data={} + data={}, ) occupant_type = OccupantTypes.filter_by_one( occupant_category_type="PRJ", occupant_code="PRJ-LDR", - id=living_space.occupant_type + id=living_space.occupant_type, ).data if not occupant_type: raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_404_NOT_FOUND", error_case="NOT_FOUND", message=f"{token_dict.selected_occupant.occupant_type_uu_id} occupant type is not allowed, only PRJ-LDR occupant type is allowed", - data={} + data={}, ) decision_book_project_person = BuildDecisionBookProjectPerson.filter_one( - BuildDecisionBookProjectPerson.build_decision_book_project_uu_id == data.get("build_decision_book_uu_id"), - BuildDecisionBookProjectPerson.living_space_id == token_dict.selected_occupant.living_space_id, + BuildDecisionBookProjectPerson.living_space_id + == token_dict.selected_occupant.living_space_id, ) return AlchemyJsonResponse( status_code="HTTP_200_OK", @@ -128,62 +135,65 @@ class ProjectDecisionBookUpdateEventMethods(MethodToEvent): @classmethod def project_decision_book_update( - cls, - data: UpdateBuildDecisionBookProjects, - token_dict: Union[EmployeeTokenObject, OccupantTokenObject], + cls, + data: UpdateBuildDecisionBookProjects, + token_dict: Union[EmployeeTokenObject, OccupantTokenObject], ): if isinstance(token_dict, EmployeeTokenObject): raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_403_FORBIDDEN", error_case="NOT_ALLOWED", message="Employee cannot create project project decision book", - data={} + data={}, ) elif isinstance(token_dict, OccupantTokenObject): living_space = BuildLivingSpace.filter_one( - BuildLivingSpace.living_space_id == token_dict.selected_occupant.living_space_id, + BuildLivingSpace.id == token_dict.selected_occupant.living_space_id, ).data if not living_space: raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_404_NOT_FOUND", error_case="NOT_FOUND", message="Living space not found", - data={} + data={}, ) occupant_type = OccupantTypes.filter_by_one( occupant_category_type="PRJ", occupant_code="PRJ-LDR", - id=living_space.occupant_type + id=living_space.occupant_type, ).data if not occupant_type: raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_404_NOT_FOUND", error_case="NOT_FOUND", message=f"{token_dict.selected_occupant.occupant_type_uu_id} occupant type is not allowed, only PRJ-LDR occupant type is allowed", - data={} + data={}, ) decision_book_project_person = BuildDecisionBookProjectPerson.filter_one( - BuildDecisionBookProjects.build_decision_book_project_uu_id == data.get("build_decision_book_project_uu_id"), - BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id, + BuildDecisionBookProjects.build_decision_book_project_uu_id + == data.get("build_decision_book_project_uu_id"), + BuildDecisionBookProjects.living_space_id + == token_dict.selected_occupant.living_space_id, ).data if not decision_book_project_person: raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_404_NOT_FOUND", error_case="NOT_FOUND", message="This project is not allowed for this occupant", - data={} + data={}, ) decision_book_project = BuildDecisionBookProjects.filter_one( - BuildDecisionBookProjects.id == decision_book_project_person.build_decision_book_project_id, + BuildDecisionBookProjects.id + == decision_book_project_person.build_decision_book_project_id, ) if decision_book_project.is_completed: raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_403_FORBIDDEN", error_case="NOT_ALLOWED", message="Project decision book is closed. No modification is allowed", - data={} + data={}, ) data_dict = data.excluded_dump() decision_book_project.update(**data_dict) @@ -204,66 +214,68 @@ class ProjectDecisionBookApprovalEventMethods(MethodToEvent): @classmethod def project_decision_book_approval( - cls, - data: ApprovalsBuildDecisionBookProjects, - token_dict: Union[EmployeeTokenObject, OccupantTokenObject], + cls, + data: ApprovalsBuildDecisionBookProjects, + token_dict: Union[EmployeeTokenObject, OccupantTokenObject], ): if isinstance(token_dict, EmployeeTokenObject): raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_403_FORBIDDEN", error_case="NOT_ALLOWED", message="Employee cannot create project project decision book", - data={} + data={}, ) elif isinstance(token_dict, OccupantTokenObject): living_space = BuildLivingSpace.filter_one( - BuildLivingSpace.living_space_id == token_dict.selected_occupant.living_space_id, + BuildLivingSpace.id == token_dict.selected_occupant.living_space_id, ).data if not living_space: raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_404_NOT_FOUND", error_case="NOT_FOUND", message="Living space not found", - data={} + data={}, ) occupant_type = OccupantTypes.filter_by_one( occupant_category_type="PRJ", occupant_code="PRJ-LDR", - id=living_space.occupant_type + id=living_space.occupant_type, ).data if not occupant_type: raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_404_NOT_FOUND", error_case="NOT_FOUND", message=f"{token_dict.selected_occupant.occupant_type_uu_id} occupant type is not allowed, only PRJ-LDR occupant type is allowed", - data={} + data={}, ) decision_book_project_person = BuildDecisionBookProjectPerson.filter_one( - BuildDecisionBookProjects.build_decision_book_project_uu_id == data.get( - "build_decision_book_project_uu_id"), - BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id, + BuildDecisionBookProjects.build_decision_book_project_uu_id + == data.get("build_decision_book_project_uu_id"), + BuildDecisionBookProjects.living_space_id + == token_dict.selected_occupant.living_space_id, ).data if not decision_book_project_person: raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_404_NOT_FOUND", error_case="NOT_FOUND", message="This project is not allowed for this occupant", - data={} + data={}, ) decision_book_project = BuildDecisionBookProjects.filter_one( - BuildDecisionBookProjects.id == decision_book_project_person.build_decision_book_project_id, + BuildDecisionBookProjects.id + == decision_book_project_person.build_decision_book_project_id, ).data if decision_book_project.is_completed: raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_403_FORBIDDEN", error_case="NOT_ALLOWED", message="Project decision book is closed. No modification is allowed", - data={} + data={}, ) data_dict = data.excluded_dump() data_dict["is_completed"] = True - data_dict["status_id"] = 1 # is completed status + data_dict["status_id"] = 1 # is completed status build_parts_list = BuildParts.filter_all( BuildParts.human_livable == True, @@ -271,7 +283,8 @@ class ProjectDecisionBookApprovalEventMethods(MethodToEvent): ).data decision_book_project_item = BuildDecisionBookItems.filter_one( - BuildDecisionBookItems.id == decision_book_project.build_decision_book_item_id + BuildDecisionBookItems.id + == decision_book_project.build_decision_book_item_id ).data book_payment_dict = dict( @@ -283,7 +296,9 @@ class ProjectDecisionBookApprovalEventMethods(MethodToEvent): payment_type = ApiEnumDropdown.get_debit_search(search_debit="DT-D") for final_price in data.final_price_list: for build_part_single in build_parts_list: - local_date = BuildDecisionBookPayments.client_arrow.get(str(final_price["date"])) + local_date = BuildDecisionBookPayments.client_arrow.get( + str(final_price["date"]) + ) local_date = system_arrow.get(local_date) payment_amount = abs(float(final_price["price"])) * -1 created_book_payment = BuildDecisionBookPayments.find_or_create( @@ -320,36 +335,25 @@ class ProjectDecisionBookPatchEventMethods(MethodToEvent): @classmethod def project_decision_book_patch( - cls, - data, - token_dict: Union[EmployeeTokenObject, OccupantTokenObject], + cls, + data, + token_dict: Union[EmployeeTokenObject, OccupantTokenObject], ): return -ProjectDecisionBookListEventMethod = ( - ProjectDecisionBookListEventMethods( - action=ActionsSchema(endpoint="/build/decision_book/project/person/list") - ) +ProjectDecisionBookListEventMethod = ProjectDecisionBookListEventMethods( + action=ActionsSchema(endpoint="/build/decision_book/project/list") ) -ProjectDecisionBookCreateEventMethod = ( - ProjectDecisionBookCreateEventMethods( - action=ActionsSchema(endpoint="/build/decision_book/project/create") - ) +ProjectDecisionBookCreateEventMethod = ProjectDecisionBookCreateEventMethods( + action=ActionsSchema(endpoint="/build/decision_book/project/create") ) -ProjectDecisionBookUpdateEventMethod = ( - ProjectDecisionBookUpdateEventMethods( - action=ActionsSchema(endpoint="/build/decision_book/project/update") - ) +ProjectDecisionBookUpdateEventMethod = ProjectDecisionBookUpdateEventMethods( + action=ActionsSchema(endpoint="/build/decision_book/project/update") ) -ProjectDecisionBookApprovalEventMethod = ( - ProjectDecisionBookApprovalEventMethods( - action=ActionsSchema(endpoint="/build/decision_book/project/approval") - ) +ProjectDecisionBookApprovalEventMethod = ProjectDecisionBookApprovalEventMethods( + action=ActionsSchema(endpoint="/build/decision_book/project/approval") ) -ProjectDecisionBookPatchEventMethod = ( - ProjectDecisionBookPatchEventMethods( - action=ActionsSchema(endpoint="/build/decision_book/project/patch") - ) +ProjectDecisionBookPatchEventMethod = ProjectDecisionBookPatchEventMethods( + action=ActionsSchema(endpoint="/build/decision_book/project/patch") ) - diff --git a/api_events/events/decision_book/project_decision_book_items.py b/api_events/events/decision_book/project_decision_book_items.py index d6208a9..c620ed1 100644 --- a/api_events/events/decision_book/project_decision_book_items.py +++ b/api_events/events/decision_book/project_decision_book_items.py @@ -76,7 +76,7 @@ class BuildDecisionBookProjectItemsUpdateEventMethods(MethodToEvent): status_code="HTTP_403_FORBIDDEN", error_case="UNAUTHORIZED", message=f"No permission to update decision book project items", - data={} + data={}, ) diff --git a/api_events/events/decision_book/project_decision_book_person.py b/api_events/events/decision_book/project_decision_book_person.py index 20a9120..329d2f6 100644 --- a/api_events/events/decision_book/project_decision_book_person.py +++ b/api_events/events/decision_book/project_decision_book_person.py @@ -26,28 +26,33 @@ class ProjectDecisionBookPersonListEventMethods(MethodToEvent): @classmethod def project_decision_book_person_list( - cls, - data: ListOptions, - token_dict: Union[EmployeeTokenObject, OccupantTokenObject], + cls, + list_options: ListOptions, + token_dict: Union[EmployeeTokenObject, OccupantTokenObject], ): if isinstance(token_dict, EmployeeTokenObject): raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_403_FORBIDDEN", error_case="NOT_ALLOWED", message="Employee cannot create project project decision book", - data={} + data={}, ) elif isinstance(token_dict, OccupantTokenObject): project_person = BuildDecisionBookProjectPerson.filter_all( - BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id, + BuildDecisionBookProjects.living_space_id + == token_dict.selected_occupant.living_space_id, ) - decision_book_ids = [_.build_decision_book_project_id for _ in project_person.data] + decision_book_ids = [ + _.build_decision_book_project_id for _ in project_person.data + ] decision_book_projects = BuildDecisionBookProjects.filter_all( - BuildDecisionBookProjects.build_decision_book_project_id.in_(decision_book_ids), + BuildDecisionBookProjects.build_decision_book_project_id.in_( + decision_book_ids + ), ) return AlchemyJsonResponse( status_code="HTTP_200_OK", - message="Project decision book created successfully", + message="Project decision person book listed successfully", result=decision_book_projects, ) @@ -62,21 +67,23 @@ class ProjectDecisionBookPersonCreateEventMethods(MethodToEvent): @classmethod def project_decision_book_create( - cls, - data: InsertBuildDecisionBookProjectPerson, - token_dict: Union[EmployeeTokenObject, OccupantTokenObject], + cls, + data: InsertBuildDecisionBookProjectPerson, + token_dict: Union[EmployeeTokenObject, OccupantTokenObject], ): if isinstance(token_dict, EmployeeTokenObject): raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_403_FORBIDDEN", error_case="NOT_ALLOWED", message="Employee cannot create project project decision book", - data={} + data={}, ) elif isinstance(token_dict, OccupantTokenObject): decision_book = BuildDecisionBookProjects.filter_one( - BuildDecisionBookProjects.build_decision_book_uu_id==data.get("build_decision_book_uu_id"), - BuildDecisionBookProjects.project_response_living_space_id==token_dict.selected_occupant.living_space_id, + BuildDecisionBookProjects.build_decision_book_uu_id + == data.get("build_decision_book_uu_id"), + BuildDecisionBookProjects.project_response_living_space_id + == token_dict.selected_occupant.living_space_id, ) return AlchemyJsonResponse( status_code="HTTP_200_OK", @@ -95,21 +102,23 @@ class ProjectDecisionBookPersonUpdateEventMethods(MethodToEvent): @classmethod def project_decision_book_update( - cls, - data: UpdateBuildDecisionBookProjectPerson, - token_dict: Union[EmployeeTokenObject, OccupantTokenObject], + cls, + data: UpdateBuildDecisionBookProjectPerson, + token_dict: Union[EmployeeTokenObject, OccupantTokenObject], ): if isinstance(token_dict, EmployeeTokenObject): raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_403_FORBIDDEN", error_case="NOT_ALLOWED", message="Employee cannot create project project decision book", - data={} + data={}, ) elif isinstance(token_dict, OccupantTokenObject): decision_book_project_person = BuildDecisionBookProjectPerson.filter_one( - BuildDecisionBookProjects.build_decision_book_project_uu_id == data.get("build_decision_book_uu_id"), - BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id, + BuildDecisionBookProjects.build_decision_book_project_uu_id + == data.get("build_decision_book_uu_id"), + BuildDecisionBookProjects.living_space_id + == token_dict.selected_occupant.living_space_id, ) return AlchemyJsonResponse( @@ -129,21 +138,23 @@ class ProjectDecisionBookPersonPatchEventMethods(MethodToEvent): @classmethod def project_decision_book_patch( - cls, - data, - token_dict: Union[EmployeeTokenObject, OccupantTokenObject], + cls, + data, + token_dict: Union[EmployeeTokenObject, OccupantTokenObject], ): if isinstance(token_dict, EmployeeTokenObject): raise BuildDecisionBookProjects.raise_http_exception( status_code="HTTP_403_FORBIDDEN", error_case="NOT_ALLOWED", message="Employee cannot create project project decision book", - data={} + data={}, ) elif isinstance(token_dict, OccupantTokenObject): decision_book_project_person = BuildDecisionBookProjectPerson.filter_one( - BuildDecisionBookProjects.build_decision_book_project_uu_id == data.get("build_decision_book_uu_id"), - BuildDecisionBookProjects.living_space_id == token_dict.selected_occupant.living_space_id, + BuildDecisionBookProjects.build_decision_book_project_uu_id + == data.get("build_decision_book_uu_id"), + BuildDecisionBookProjects.living_space_id + == token_dict.selected_occupant.living_space_id, ) return AlchemyJsonResponse( status_code="HTTP_200_OK", @@ -152,10 +163,8 @@ class ProjectDecisionBookPersonPatchEventMethods(MethodToEvent): ) -ProjectDecisionBookPersonListEventMethod = ( - ProjectDecisionBookPersonListEventMethods( - action=ActionsSchema(endpoint="/build/decision_book/project/people/list") - ) +ProjectDecisionBookPersonListEventMethod = ProjectDecisionBookPersonListEventMethods( + action=ActionsSchema(endpoint="/build/decision_book/project/people/list") ) ProjectDecisionBookPersonCreateEventMethod = ( ProjectDecisionBookPersonCreateEventMethods( @@ -167,8 +176,6 @@ ProjectDecisionBookPersonUpdateEventMethod = ( action=ActionsSchema(endpoint="/build/decision_book/project/people/update") ) ) -ProjectDecisionBookPersonPatchEventMethod = ( - ProjectDecisionBookPersonPatchEventMethods( - action=ActionsSchema(endpoint="/build/decision_book/project/people/patch") - ) +ProjectDecisionBookPersonPatchEventMethod = ProjectDecisionBookPersonPatchEventMethods( + action=ActionsSchema(endpoint="/build/decision_book/project/people/patch") ) diff --git a/api_events/tasks2events/__init__.py b/api_events/tasks2events/__init__.py index 364411c..c6f44bb 100644 --- a/api_events/tasks2events/__init__.py +++ b/api_events/tasks2events/__init__.py @@ -17,6 +17,15 @@ from api_events.tasks2events.occupant_tasks.meeting_president import ( from api_events.tasks2events.occupant_tasks.meeting_voted_president import ( BuildMeetingVotedPresident, ) +from api_events.tasks2events.occupant_tasks.project_leader import ProjectLeader +from api_events.tasks2events.occupant_tasks.project_finance import ( + ProjectFinanceResponsible, +) +from api_events.tasks2events.occupant_tasks.project_employee import ProjectEmployee +from api_events.tasks2events.occupant_tasks.project_technical import ProjectTechnical +from api_events.tasks2events.occupant_tasks.project_responsiable import ( + ProjectResponsible, +) __all__ = [ @@ -32,4 +41,9 @@ __all__ = [ "BuildMeetingAdvisor", "BuildMeetingAttendance", "BuildMeetingVotedPresident", + "ProjectLeader", + "ProjectFinanceResponsible", + "ProjectEmployee", + "ProjectTechnical", + "ProjectResponsible", ] diff --git a/api_events/tasks2events/occupant_tasks/project_employee.py b/api_events/tasks2events/occupant_tasks/project_employee.py index 22e8ea4..473074a 100644 --- a/api_events/tasks2events/occupant_tasks/project_employee.py +++ b/api_events/tasks2events/occupant_tasks/project_employee.py @@ -9,7 +9,6 @@ class ProjectEmployee(AddEventFunctionality): {"function_code": "96459b36-37f2-4d5b-8370-c459058d5bce"}, {"function_code": "ce3630e4-2bf9-4433-bdab-1ee72117e54b"}, {"function_code": "b27e4fd0-6e3e-441b-9b33-806ac7082444"}, - ] def __new__(cls, *args, **kwargs): diff --git a/api_events/tasks2events/occupant_tasks/project_finance.py b/api_events/tasks2events/occupant_tasks/project_finance.py index eb98231..4c2cdd7 100644 --- a/api_events/tasks2events/occupant_tasks/project_finance.py +++ b/api_events/tasks2events/occupant_tasks/project_finance.py @@ -9,7 +9,6 @@ class ProjectFinanceResponsible(AddEventFunctionality): {"function_code": "ce3630e4-2bf9-4433-bdab-1ee72117e54b"}, {"function_code": "b27e4fd0-6e3e-441b-9b33-806ac7082444"}, {"function_code": "7101b5ca-8bef-40f9-8b4d-646d9994e18f"}, - ] def __new__(cls, *args, **kwargs): diff --git a/api_events/tasks2events/occupant_tasks/project_leader.py b/api_events/tasks2events/occupant_tasks/project_leader.py index 6332a53..0137b0b 100644 --- a/api_events/tasks2events/occupant_tasks/project_leader.py +++ b/api_events/tasks2events/occupant_tasks/project_leader.py @@ -15,6 +15,7 @@ class ProjectLeader(AddEventFunctionality): {"function_code": "7fbd18a0-c099-4494-ada1-bb23e39bb141"}, {"function_code": "a122e84a-5556-4bf7-b680-1f47c438d4f7"}, {"function_code": "7101b5ca-8bef-40f9-8b4d-646d9994e18f"}, + {"function_code": "96459b36-37f2-4d5b-8370-c459058d5bce"}, ] def __new__(cls, *args, **kwargs): diff --git a/api_validations/validations_request/project_decision_book.py b/api_validations/validations_request/project_decision_book.py index 01163f8..55b2c50 100644 --- a/api_validations/validations_request/project_decision_book.py +++ b/api_validations/validations_request/project_decision_book.py @@ -43,7 +43,7 @@ class UpdateBuildDecisionBookProjectPerson(PydanticBaseModel): class InsertBuildDecisionBookProjects(BaseModelRegular): build_decision_book_item_uu_id: str - project_response_person_uu_id: str + project_responsible_person_uu_id: str project_name: str project_start_date: str project_stop_date: str diff --git a/databases/__init__.py b/databases/__init__.py index 75e66e9..8551381 100644 --- a/databases/__init__.py +++ b/databases/__init__.py @@ -6,6 +6,14 @@ from databases.sql_models.account.account import ( AccountCodes, AccountDetail, AccountMaster, + AccountRecordDecisionPaymentClosed, + AccountRecordExchanges, +) +from databases.sql_models.building.budget import ( + DecisionBookBudgetBooks, + DecisionBookBudgetCodes, + DecisionBookBudgetMaster, + DecisionBookBudgets, ) from databases.sql_models.account.iban import ( BuildIbans, @@ -100,6 +108,8 @@ __all__ = [ "AccountCodes", "AccountDetail", "AccountMaster", + "AccountRecordDecisionPaymentClosed", + "AccountRecordExchanges", "BuildIbans", "BuildIbanDescription", "CrypterEngine", @@ -122,6 +132,10 @@ __all__ = [ "BuildDecisionBookProjectPerson", "BuildDecisionBookPersonOccupants", "BuildDecisionBookProjectItems", + "DecisionBookBudgetBooks", + "DecisionBookBudgetCodes", + "DecisionBookBudgetMaster", + "DecisionBookBudgets", "Companies", "RelationshipDutyCompany", "Employees", diff --git a/databases/sql_models/account/account.py b/databases/sql_models/account/account.py index 2cd014e..a27502a 100644 --- a/databases/sql_models/account/account.py +++ b/databases/sql_models/account/account.py @@ -650,3 +650,99 @@ class AccountRecords(CrudCollection): # ) # ) # print("is all dues_type", payment_dict["dues_type"], paid_value) + + +class AccountRecordDecisionPaymentClosed(CrudCollection): + + __tablename__ = "account_record_decision_payment_closed" + __exclude__fields__ = [] + + arc_currency: Mapped[str] = mapped_column( + String(5), nullable=False, comment="Unit of Currency" + ) + arc_processing_time: Mapped[TIMESTAMP] = mapped_column( + TIMESTAMP, nullable=False, comment="Processing Time" + ) + arc_currency_value: Mapped[float] = mapped_column( + Numeric(20, 6), nullable=False, comment="Currency Value" + ) + + decision_book_budgets_id: Mapped[int] = mapped_column( + ForeignKey("decision_book_budgets.id"), nullable=True + ) + decision_book_budgets_uu_id: Mapped[str] = mapped_column( + String, nullable=True, comment="Budget UUID" + ) + + build_decision_book_payment_id: Mapped[int] = mapped_column( + ForeignKey("build_decision_book_payments.id") + ) + build_decision_book_payment_uu_id: Mapped[str] = mapped_column( + String, nullable=True, comment="Build Decision Book Payment UU ID" + ) + account_records_id: Mapped[int] = mapped_column(ForeignKey("account_records.id")) + account_records_uu_id: Mapped[str] = mapped_column( + String, nullable=True, comment="Account Record UU ID" + ) + + __table_args__ = ( + Index( + "_account_record_decision_payment_closed_ndx_00", + account_records_id, + build_decision_book_payment_id, + arc_processing_time, + ), + Index( + "_account_record_decision_payment_closed_ndx_01", + build_decision_book_payment_id, + account_records_id, + arc_processing_time, + ), + {"comment": "Account Record Decision Payment Closed Information"}, + ) + + +class AccountRecordExchanges(CrudCollection): + __tablename__ = "account_record_exchanges" + __exclude__fields__ = [] + + are_currency: Mapped[str] = mapped_column( + String(5), nullable=False, comment="Unit of Currency" + ) + are_exchange_rate: Mapped[float] = mapped_column( + Numeric(18, 6), nullable=False, server_default="1" + ) + usd_exchange_rate_value: Mapped[float] = mapped_column( + Numeric(18, 6), + nullable=True, + server_default="0", + comment="It will be written by multiplying the usd exchange rate with the current value result.", + ) + eur_exchange_rate_value: Mapped[float] = mapped_column( + Numeric(18, 6), + nullable=True, + server_default="0", + comment="It will be written by multiplying the eur exchange rate with the current value result.", + ) + gbp_exchange_rate_value: Mapped[float] = mapped_column( + Numeric(18, 6), + nullable=True, + server_default="0", + comment="It will be written by multiplying the gpd exchange rate with the current value result.", + ) + cny_exchange_rate_value: Mapped[float] = mapped_column( + Numeric(18, 6), + nullable=True, + server_default="0", + comment="It will be written by multiplying the cny exchange rate with the current value result.", + ) + + account_records_id: Mapped[int] = mapped_column(ForeignKey("account_records.id")) + account_records_uu_id: Mapped[str] = mapped_column( + String, nullable=True, comment="Account Record UU ID" + ) + + __table_args__ = ( + Index("_account_record_exchanges_ndx_00", account_records_id), + {"comment": "Account Record Exchanges Information"}, + ) diff --git a/databases/sql_models/building/budget.py b/databases/sql_models/building/budget.py new file mode 100644 index 0000000..8e9ef98 --- /dev/null +++ b/databases/sql_models/building/budget.py @@ -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"}, + ) diff --git a/databases/sql_models/building/build.py b/databases/sql_models/building/build.py index c18125b..0af1f7a 100644 --- a/databases/sql_models/building/build.py +++ b/databases/sql_models/building/build.py @@ -549,6 +549,7 @@ class BuildLivingSpace(CrudCollection): occupant_type_uu_id: Mapped[str] = mapped_column( String, nullable=False, comment="Occupant Type UUID" ) + __table_args__ = ( {"comment": "Living Space inside building parts that are related to people"}, ) @@ -574,7 +575,6 @@ class BuildLivingSpace(CrudCollection): ).data related_service = Services.filter_by_one( related_responsibility=occupant_type.occupant_code, - **Services.valid_record_dict, ).data created_living_space.save_and_confirm() diff --git a/databases/sql_models/building/decision_book.py b/databases/sql_models/building/decision_book.py index 5e9e8fa..9fed54d 100644 --- a/databases/sql_models/building/decision_book.py +++ b/databases/sql_models/building/decision_book.py @@ -883,14 +883,14 @@ class BuildDecisionBookPayments(CrudCollection): String, nullable=False, comment="Build Part UUID" ) - budget_records_id: Mapped[int] = mapped_column(ForeignKey("account_records.id"), nullable=True) - budget_records_uu_id: Mapped[str] = mapped_column( - String, nullable=True, comment="Budget UUID" - ) - accounting_id: Mapped[int] = mapped_column(ForeignKey("account_detail.id"), nullable=True) - accounting_uu_id: Mapped[str] = mapped_column( - String, nullable=True, comment="Accounting UUID" - ) + # budget_records_id: Mapped[int] = mapped_column(ForeignKey("account_records.id"), nullable=True) + # budget_records_uu_id: Mapped[str] = mapped_column( + # String, nullable=True, comment="Budget UUID" + # ) + # accounting_id: Mapped[int] = mapped_column(ForeignKey("account_detail.id"), nullable=True) + # accounting_uu_id: Mapped[str] = mapped_column( + # String, nullable=True, comment="Accounting UUID" + # ) # receive_debit_id: Mapped[int] = mapped_column(ForeignKey("api_enum_dropdown.id"), nullable=True) # receive_debit_uu_id: Mapped[str] = mapped_column(String, nullable=True, comment="Debit UUID") @@ -920,11 +920,6 @@ class BuildDecisionBookPayments(CrudCollection): process_date, unique=True, ), - Index( - "build_decision_book_payments_detail_ndx_01", - budget_records_id, - process_date, - ), {"comment": "Payment Details of Decision Book Payments"}, ) @@ -1201,13 +1196,6 @@ class BuildDecisionBookProjectPerson(CrudCollection): String, nullable=True, comment="Living Space UUID" ) - project_team_type_id: Mapped[int] = mapped_column( - ForeignKey("api_enum_dropdown.id"), nullable=True - ) - project_team_type_uu_id: Mapped[str] = mapped_column( - String, nullable=True, comment="Management Type UUID" - ) - __table_args__ = ( {"comment": "People that are attended to building project meetings."}, ) @@ -1245,6 +1233,7 @@ class BuildDecisionBookProjectItems(CrudCollection): {"comment": "Project Items related to decision taken at building meetings"}, ) + # # class BuildDecisionBookPaymentsMaster(CrudCollection): # """ diff --git a/service_app/routers/__init__.py b/service_app/routers/__init__.py index 0bd546b..19ab8a3 100644 --- a/service_app/routers/__init__.py +++ b/service_app/routers/__init__.py @@ -50,6 +50,15 @@ from .application.occupants.router import occupant_types_route from .decision_book.decision_book_invitations.router import ( build_decision_book_invitations, ) +from .decision_book.project_decision_book.router import ( + build_decision_book_project_route, +) +from .decision_book.project_decision_book_items.router import ( + build_decision_book_project_items_route, +) +from .decision_book.project_decision_book_person.router import ( + build_decision_book_project_people_route, +) __all__ = [ @@ -87,4 +96,7 @@ __all__ = [ "build_project_decision_book_person_route", "endpoint_restriction_route", "build_decision_book_invitations", + "build_decision_book_project_route", + "build_decision_book_project_items_route", + "build_decision_book_project_people_route", ] diff --git a/service_app/routers/decision_book/project_decision_book/router.py b/service_app/routers/decision_book/project_decision_book/router.py index f28da14..dc047da 100644 --- a/service_app/routers/decision_book/project_decision_book/router.py +++ b/service_app/routers/decision_book/project_decision_book/router.py @@ -21,7 +21,9 @@ build_decision_book_project_route.include_router( @build_decision_book_project_route.post( path="/list", summary="List Active/Delete/Confirm Build Decision Book People" ) -def build_decision_book_project_people_list(request: Request, list_options: ListOptions): +def build_decision_book_project_people_list( + request: Request, list_options: ListOptions +): token_dict = parse_token_object_to_dict(request=request) return token_dict.available_event(list_options=list_options, token_dict=token_dict) @@ -30,7 +32,9 @@ def build_decision_book_project_people_list(request: Request, list_options: List path="/create", summary="Create Build Decision Book Project People with given auth levels", ) -def build_decision_book_project_people_create(request: Request, data: InsertBuildDecisionBookProjects): +def build_decision_book_project_people_create( + request: Request, data: InsertBuildDecisionBookProjects +): token_dict = parse_token_object_to_dict(request=request) return token_dict.available_event(data=data, token_dict=token_dict) @@ -39,7 +43,9 @@ def build_decision_book_project_people_create(request: Request, data: InsertBuil path="/update/{build_decision_book_project_id}", summary="Add people to Build Decision People Book with given auth levels", ) -def build_decision_book_project_people_update(request: Request, data: UpdateBuildDecisionBookProjects): +def build_decision_book_project_people_update( + request: Request, data: UpdateBuildDecisionBookProjects +): token_dict = parse_token_object_to_dict(request=request) return token_dict.available_event(data=data, token_dict=token_dict) diff --git a/service_app/routers/decision_book/project_decision_book_items/router.py b/service_app/routers/decision_book/project_decision_book_items/router.py index 0ab5e43..6262cec 100644 --- a/service_app/routers/decision_book/project_decision_book_items/router.py +++ b/service_app/routers/decision_book/project_decision_book_items/router.py @@ -10,7 +10,8 @@ from api_services.redis.auth_actions.token import parse_token_object_to_dict build_decision_book_project_items_route = APIRouter( - prefix="/build/decision_book/project/items", tags=["Decision Project Book Project Items"] + prefix="/build/decision_book/project/items", + tags=["Decision Project Book Project Items"], ) build_decision_book_project_items_route.include_router( build_decision_book_project_items_route, include_in_schema=True @@ -18,9 +19,12 @@ build_decision_book_project_items_route.include_router( @build_decision_book_project_items_route.post( - path="/list", summary="List Active/Delete/Confirm Decision Project Book Project Items" + path="/list", + summary="List Active/Delete/Confirm Decision Project Book Project Items", ) -def build_decision_book_project_people_items_list(request: Request, list_options: ListOptions): +def build_decision_book_project_people_items_list( + request: Request, list_options: ListOptions +): token_dict = parse_token_object_to_dict(request=request) return token_dict.available_event(list_options=list_options, token_dict=token_dict) @@ -29,7 +33,9 @@ def build_decision_book_project_people_items_list(request: Request, list_options path="/create", summary="Create Build Decision Book Project People with given auth levels", ) -def build_decision_book_project_people_items_create(request: Request, data: InsertBuildDecisionBookProjectItems): +def build_decision_book_project_people_items_create( + request: Request, data: InsertBuildDecisionBookProjectItems +): token_dict = parse_token_object_to_dict(request=request) return token_dict.available_event(data=data, token_dict=token_dict) @@ -39,15 +45,15 @@ def build_decision_book_project_people_items_create(request: Request, data: Inse summary="Add people to Decision Project Book Project Items with given auth levels", ) def build_decision_book_project_people_items_update( - request: Request, - build_decision_book_project_item_uu_id: str, - data: UpdateBuildDecisionBookProjectItems + request: Request, + build_decision_book_project_item_uu_id: str, + data: UpdateBuildDecisionBookProjectItems, ): token_dict = parse_token_object_to_dict(request=request) return token_dict.available_event( data=data, build_decision_book_project_item_uu_id=build_decision_book_project_item_uu_id, - token_dict=token_dict + token_dict=token_dict, ) @@ -56,11 +62,11 @@ def build_decision_book_project_people_items_update( summary="Patch people from Decision Project Book Project Items with given auth levels", ) def build_decision_book_project_people_items_patch( - request: Request, build_decision_book_project_item_uu_id:str, data + request: Request, build_decision_book_project_item_uu_id: str, data ): token_dict = parse_token_object_to_dict(request=request) return token_dict.available_event( data=data, build_decision_book_project_item_uu_id=build_decision_book_project_item_uu_id, - token_dict=token_dict + token_dict=token_dict, ) diff --git a/service_app/routers/decision_book/project_decision_book_person/router.py b/service_app/routers/decision_book/project_decision_book_person/router.py index f6a4ab4..b2145d1 100644 --- a/service_app/routers/decision_book/project_decision_book_person/router.py +++ b/service_app/routers/decision_book/project_decision_book_person/router.py @@ -20,7 +20,9 @@ build_decision_book_project_people_route.include_router( @build_decision_book_project_people_route.post( path="/list", summary="List Active/Delete/Confirm Build Decision Book People" ) -def build_decision_book_project_people_list(request: Request, list_options: ListOptions): +def build_decision_book_project_people_list( + request: Request, list_options: ListOptions +): token_dict = parse_token_object_to_dict(request=request) return token_dict.available_event(list_options=list_options, token_dict=token_dict) @@ -29,7 +31,9 @@ def build_decision_book_project_people_list(request: Request, list_options: List path="/create", summary="Create Build Decision Book Project People with given auth levels", ) -def build_decision_book_project_people_create(request: Request, data: InsertBuildDecisionBookProjectPerson): +def build_decision_book_project_people_create( + request: Request, data: InsertBuildDecisionBookProjectPerson +): token_dict = parse_token_object_to_dict(request=request) return token_dict.available_event(data=data, token_dict=token_dict) @@ -39,13 +43,15 @@ def build_decision_book_project_people_create(request: Request, data: InsertBuil summary="Add people to Build Decision People Book with given auth levels", ) def build_decision_book_project_people_update( - request: Request, build_decision_book_project_person_uu_id:str, data: UpdateBuildDecisionBookProjectPerson + request: Request, + build_decision_book_project_person_uu_id: str, + data: UpdateBuildDecisionBookProjectPerson, ): token_dict = parse_token_object_to_dict(request=request) return token_dict.available_event( data=data, build_decision_book_project_person_uu_id=build_decision_book_project_person_uu_id, - token_dict=token_dict + token_dict=token_dict, ) @@ -54,11 +60,13 @@ def build_decision_book_project_people_update( summary="Patch people from Build Decision Book Project People with given auth levels", ) def build_decision_book_project_people_patch( - request: Request, build_decision_book_project_person_uu_id:str, data: UpdateBuildDecisionBookProjectPerson + request: Request, + build_decision_book_project_person_uu_id: str, + data: UpdateBuildDecisionBookProjectPerson, ): token_dict = parse_token_object_to_dict(request=request) return token_dict.available_event( data=data, build_decision_book_project_person_uu_id=build_decision_book_project_person_uu_id, - token_dict=token_dict + token_dict=token_dict, ) diff --git a/service_app_init/initialize_app/initiator.py b/service_app_init/initialize_app/initiator.py index c5b37c1..03dc0d7 100644 --- a/service_app_init/initialize_app/initiator.py +++ b/service_app_init/initialize_app/initiator.py @@ -74,11 +74,7 @@ def init_api_enums_build_types(): created_build_type.save_and_confirm() insert_enums = [ - { - "enum_class": "BuildDuesTypes", - "type_code": "BDT-D", - "type_name": "Debit" - }, + {"enum_class": "BuildDuesTypes", "type_code": "BDT-D", "type_name": "Debit"}, { "enum_class": "BuildDuesTypes", "type_code": "BDT-A", @@ -217,7 +213,28 @@ def init_api_enums_build_types(): "type_code": "DT-Z", "type_name": "Zero Balance", }, + { + "enum_class": "TimePeriod", + "type_code": "TP-W", + "type_name": "Weekly", + }, + { + "enum_class": "TimePeriod", + "type_code": "TP-M", + "type_name": "Monthly", + }, + { + "enum_class": "TimePeriod", + "type_code": "TP-Q", + "type_name": "Quarterly", + }, + { + "enum_class": "TimePeriod", + "type_code": "TP-Y", + "type_name": "Yearly", + }, ] + for insert_enum in insert_enums: created_api_enum = ApiEnumDropdown.find_or_create( enum_class=insert_enum["enum_class"], diff --git a/service_app_init/initialize_app/modules_and_services_init.py b/service_app_init/initialize_app/modules_and_services_init.py index 5bf2f78..81e14cf 100644 --- a/service_app_init/initialize_app/modules_and_services_init.py +++ b/service_app_init/initialize_app/modules_and_services_init.py @@ -245,6 +245,7 @@ def create_modules_and_services_and_actions(): service_name=duty_object.duty_name, service_description=duty_object.duty_description, service_code=f"SRE-{duty_object.duty_code}", + related_responsibility=duty_object.duty_code, ) created_service.save_and_confirm() @@ -255,6 +256,7 @@ def create_modules_and_services_and_actions(): service_name=occupant_type.occupant_type, service_description=occupant_type.occupant_description, service_code=f"SRO-{occupant_type.occupant_code}", + related_responsibility=occupant_type.occupant_code, ) created_service.save_and_confirm() @@ -262,7 +264,6 @@ def create_modules_and_services_and_actions(): create_services_meeting(module_dict=build_module_module_dict) create_services_building(module_dict=build_module_module_dict) create_services_flat(module_dict=build_module_module_dict) - Modules.save() return # # super_admin_module_created=None diff --git a/service_app_test/test_application/migrate_old_data/decision_book_project.py b/service_app_test/test_application/migrate_old_data/decision_book_project.py index 168c5fe..cd06411 100644 --- a/service_app_test/test_application/migrate_old_data/decision_book_project.py +++ b/service_app_test/test_application/migrate_old_data/decision_book_project.py @@ -1,4 +1,3 @@ - from api_validations.validations_request import ( InsertBuildDecisionBookProjectItems, UpdateBuildDecisionBookProjects, @@ -8,7 +7,9 @@ from api_validations.validations_request import ( def generate_update_project_item(**kwargs): return { - "build_decision_book_project_uu_id": kwargs.get("build_decision_book_project_uu_id", None), + "build_decision_book_project_uu_id": kwargs.get( + "build_decision_book_project_uu_id", None + ), "is_out_sourced": kwargs.get("is_out_sourced", False), "project_note": kwargs.get("project_note", None), # "decision_book_pdf_path": str(kwargs.get("decision_book_pdf_path", None)), @@ -24,7 +25,9 @@ def generate_update_project_item(**kwargs): def generate_approval_project_item(**kwargs): return { - "build_decision_book_project_uu_id": kwargs.get("build_decision_book_project_uu_id", None), + "build_decision_book_project_uu_id": kwargs.get( + "build_decision_book_project_uu_id", None + ), "final_price_list": kwargs.get("final_price_list", []), "project_stop_date": kwargs.get("project_stop_date", None), } @@ -32,7 +35,9 @@ def generate_approval_project_item(**kwargs): def generate_insert_project_item(**kwargs): return { - "build_decision_book_project_uu_id": kwargs.get("build_decision_book_project_uu_id", None), + "build_decision_book_project_uu_id": kwargs.get( + "build_decision_book_project_uu_id", None + ), "item_header": kwargs.get("item_header", ""), "item_comment": kwargs.get("item_comment", ""), } @@ -40,8 +45,7 @@ def generate_insert_project_item(**kwargs): def create_decision_book_items(requester, insert_project_item): response = requester.post( - endpoint="/build/decision_book/project/items/create", - data=insert_project_item + endpoint="/build/decision_book/project/items/create", data=insert_project_item ) print("text", response.text) print("json", response.json()) @@ -50,8 +54,7 @@ def create_decision_book_items(requester, insert_project_item): def update_decision_book_project(requester, update_project_item): response = requester.post( - endpoint="/build/decision_book/project/update", - data=update_project_item + endpoint="/build/decision_book/project/update", data=update_project_item ) print("text", response.text) print("json", response.json()) @@ -59,8 +62,7 @@ def update_decision_book_project(requester, update_project_item): def approve_build_decision_book_project_approval(requester, approval_project_item): response = requester.post( - endpoint="/build/decision_book/project/approval", - data=approval_project_item + endpoint="/build/decision_book/project/approval", data=approval_project_item ) print("text", response.text) print("json", response.json()) diff --git a/service_app_test/test_application/migrate_old_data/runner.py b/service_app_test/test_application/migrate_old_data/runner.py index d0a1551..f7340ff 100644 --- a/service_app_test/test_application/migrate_old_data/runner.py +++ b/service_app_test/test_application/migrate_old_data/runner.py @@ -3,14 +3,21 @@ import arrow from service_app_test.bases import RequestToApi from service_app_test.api_configs import LocalAPI, BothAPIS from service_app_test.test_application.evyos.decision_book import ( - run_decision_book_depends, list_decision_books, + run_decision_book_depends, + list_decision_books, ) from service_app_test.test_application.evyos.decision_book_items import ( send_invitation_to_building_residents, collect_invitation_to_building_residents, - assign_people_to_pre_or_wrt, run_decision_book_items, + assign_people_to_pre_or_wrt, + run_decision_book_items, +) +from service_app_test.test_application.migrate_old_data.get_occupants_codes import ( + get_occupants_types, +) +from service_app_test.test_application.migrate_old_data.get_type_codes import ( + get_type_codes_key_and_class, ) -from service_app_test.test_application.migrate_old_data.get_type_codes import get_type_codes_key_and_class from service_app_test.test_application.migrate_old_data.people import migrate_people from service_app_test.test_application.migrate_old_data.building import ( migrate_build, @@ -20,9 +27,23 @@ from service_app_test.test_application.migrate_old_data.company import migrate_c from service_app_test.test_application.migrate_old_data.accounts import ( migrate_account_records, ) +from service_app_test.test_application.migrate_old_data.decision_book_project import ( + approve_build_decision_book_project_approval, + update_decision_book_project, + create_decision_book_items, + generate_insert_project_item, + generate_update_project_item, + generate_approval_project_item, +) +local_api = RequestToApi() +local_api.overwrite_base_url(base_url=LocalAPI.base_url) -password_token = "g17Anw5yBvrASMXtES8olfE8vN32R-U7wO_g8kbhjK8C67ww7fv39Mp3ygjouDw8UrwFJhemqFwbEIi2XzIN1u_rq4nmUSROZAnL3NyhczfizMZml0Rd84HWFA80Z1WpIsOadRlGVN77rr3OrrfYXfp1Fa6f_LsiTj0m3N-ie6Mr-4NIQ-3g25Z4oCD4Up6o" +both_apis = BothAPIS() +both_apis.local_api = local_api + +password_token = "" +password_token_occ = "" login_data = { "domain": "evyos.com.tr", "access_key": "karatay.berkay.sup@evyos.com.tr", @@ -30,80 +51,23 @@ login_data = { "remember_me": False, "password_token": password_token, } -login_creds_employee = { - "domain": "evyos.com.tr", - "access_key": "karatay.berkay.sup@evyos.com.tr", - "password": "string", - "remember_me": False, - "password_token": password_token, -} -access_key_president = "mehmet.karatay@hotmail.com" login_creds_occupant = { "domain": "evyos.com.tr", - "access_key": access_key_president, + "access_key": "mehmet.karatay@hotmail.com", "password": "string", "remember_me": False, - "password_token": "88ENxfw1a0tQRHTQ1RWPsv1iWEe2jzwPqra1tH5PuGmr69fneVDdCpQhgj5LnY0L9IA2Zq8eUX7LRpwKaez0rbYQZRdrKNCfx98M4erSNSRCFPI35tBvGdRuTEISIGoUXPI1xEcfQvGT-AOILc-yPOlyfYLyB7Chej1bjuGxe04hdtqQon2rYLmI8KMCv2XK" + "password_token": password_token_occ, } -wrt_creds_occupant = { - "domain": "evyos.com.tr", - "access_key": access_key_president, - "password": "string", - "remember_me": False, - "password_token": "", -} - -# wag_api = RequestToApi() -# wag_api.overwrite_base_url(base_url=WagAPI.base_url) -# wag_api.selected_object = wag_api.login_via_email_and_password( -# login_data=login_data_wag, is_password_valid=True -# ) - -local_api = RequestToApi() -local_api.overwrite_base_url(base_url=LocalAPI.base_url) - - -both_apis = BothAPIS() -# both_apis.wag_api = wag_api -both_apis.local_api = local_api - -assign_people_to_create_item = 3 - -# selection_list = None selection_list = [ - "68b5e3d9-c546-4ebd-98f5-df468f20cc54", - "da2a282c-7053-4cdf-bca5-c41f548883cc", -] -# selection_list = None -manager_token = "jk-8A2kXjk86QGP2WHMrOF7E9UTfzOe0Wcq0HDZFDh78V5YbuNVxmw" -writers_token = manager_token -people_uu_id_list = [ - "561a9cbc-587a-4582-8eff-f005f5b1e847", - "561a9cbc-587a-4582-8eff-f005f5b1e847", - "561a9cbc-587a-4582-8eff-f005f5b1e847", + # "523dbcd3-fe87-4208-86c2-da45204dfafc", + # "24aed2e5-bca0-4657-a056-badf9b3aa81c", ] -list_of_attendees = [ -"zFhY5z05ixUxvryeGYPdchUDYhIoatghz06bb74FwJuMyrH1w4JVQw", -"wlm0VNMnUDj91B8HLWQE9vKZsOIPcYQlHZqmgV_U_ywIOXFxR7RDxw", -"2ckn8Jp7r0xgHqdExk82SQVUhekwSMNI6Yvd1ESV6LD4769kyeso2g", -"6iY_p1JkptCj1JeptEUokw5BzxtcgQ3tHYkF2Vud9Cl1uzO3TJZmnQ", -"jaOQodhZaDcEJ8_1Y2hjOlKk3f5SiaYfYU-xqDlervLdeYgHumkniw", -"2iPk5lcTYdl_-S7odsLbN8Kij20pVNHmGSDC6gIJHIIRQ74JitP_LA", -"cl82VDi7xQNO77v3CC7X8wcQ4i_C-K9uuKZyqnvh4KHi0ciwqXyOKA", -"UTHZNg9gx0lZ4laDUz7S5xQ5e83vxrufqp7PbPCJx29AxhzX9DL62A", -"rwlasXNiQXXxfRBXv78DkQeSS1S3ubV0ulrXK8cZgmCDkHAIoWvU0w", -"JgAVc5U5lsfrbSx1gx0_SYQcO0q_K2HX8Vir5SIdiM-Z-PuHAG5cRg", -"V_rSldMaE9P_-uEfSsyh1ojEYep4Xma3NY7BIKzuicj_wEkCqFramw", -] -living_space_data = dict( - build_parts_uu_id="68b5e3d9-c546-4ebd-98f5-df468f20cc54", - person_uu_id="dc135536-086f-4e11-af3a-02c7cf65f265", - occupant_type_uu_id="a47372a9-67da-4dfb-82a9-51f9ca15ef63", - expiry_starts=arrow.now().date().__str__(), -) - +manager_token = "" +people_uu_id = "" +list_of_attendees = [] +assign_people_to_create_item = -1 if assign_people_to_create_item == -1: local_api.selected_object = local_api.login_via_email_and_password( login_data=login_data, is_password_valid=False @@ -113,15 +77,44 @@ if assign_people_to_create_item == -1: migrate_build(requester=both_apis) migrate_build_living_space(requester=both_apis) # migrate_account_records(requester=both_apis) - - if assign_people_to_create_item == 0: + if not bool(selection_list): local_api.selected_object = local_api.login_via_email_and_password( login_data=login_data, is_password_valid=True ) - response = local_api.post(endpoint="/building/living_space/create", data=living_space_data) - print('response', response.text) + occupant_manager = get_occupants_types( + occupant_code="BU-MNG", requester=both_apis.local_api + )["data"]["uu_id"] + + response = both_apis.local_api.post( + endpoint="/building/parts/list", + data={"query": {"part_code": "MAN-ROOM"}}, + ) + print("text", response.text) + print("json", response.json()) + response_json = response.json() + build_parts_uu_id = response_json["data"][0]["uu_id"] + + response = both_apis.local_api.post( + endpoint="/user/list", + data={"query": {"email": "mehmet.karatay@hotmail.com"}}, + ) + print("text", response.text) + print("json", response.json()) + response_json = response.json() + person_uu_id = response_json["data"][0]["person_uu_id"] + + response = local_api.post( + endpoint="/building/living_space/create", + data=dict( + build_parts_uu_id=build_parts_uu_id, + person_uu_id=person_uu_id, + occupant_type_uu_id=occupant_manager, + expiry_starts=arrow.now().date().__str__(), + ), + ) + print("response", response.text) local_api.selected_object = local_api.login_via_email_and_password( login_data=login_creds_occupant, @@ -159,31 +152,33 @@ elif assign_people_to_create_item == 2: selection_list=selection_list, ) assign_people_to_pre_or_wrt( - person_uu_id=people_uu_id_list[0], + person_uu_id=people_uu_id, manager_token=manager_token, occupant_code="MT-VPR", requester=both_apis.local_api, ) assign_people_to_pre_or_wrt( - person_uu_id=people_uu_id_list[1], + person_uu_id=people_uu_id, manager_token=manager_token, occupant_code="MT-WRT", requester=both_apis.local_api, ) assign_people_to_pre_or_wrt( - person_uu_id=people_uu_id_list[2], + person_uu_id=people_uu_id, manager_token=manager_token, occupant_code="MT-PRS", requester=both_apis.local_api, ) elif assign_people_to_create_item == 3: local_api.selected_object = local_api.login_via_email_and_password( - login_data=wrt_creds_occupant, + login_data=login_creds_occupant, is_password_valid=True, selection_list=selection_list, ) - selected_decision_book_uu_id = list_decision_books(requester=both_apis.local_api)["data"][0]["uu_id"] + selected_decision_book_uu_id = list_decision_books(requester=both_apis.local_api)[ + "data" + ][0]["uu_id"] print("select_company_uu_id", local_api.selected_object) is_fixed_price = False @@ -200,100 +195,126 @@ elif assign_people_to_create_item == 3: )["data"]["uu_id"] run_decision_book_items( - writers_token=writers_token, + writers_token=manager_token, info_type_uu_id=info_type_reno_uu_id, item_comment="En son toplantıda bahsedilen 2 nolu daireyi etkiliyen çözüm için kanalizasyon ve " - "tamirleri için fiyat alınarak arka alan yağmur suyu direnajının yaplımasının projelendirilmesi.", + "tamirleri için fiyat alınarak arka alan yağmur suyu direnajının yaplımasının projelendirilmesi.", start_date=start_date, end_date=end_date, - requester=both_apis.local_api + requester=both_apis.local_api, ) unit_price = 17.04 run_decision_book_items( - writers_token=writers_token, + writers_token=manager_token, info_type_uu_id=info_type_deb_uu_id, item_comment="Aidat gündemi için 1,2,3 nolu daireler için 1400 TL, diğer daireler için 1500 TL " - "olmasına karar verildi.", + "olmasına karar verildi.", unit_price=unit_price, - requester=both_apis.local_api + requester=both_apis.local_api, ) run_decision_book_items( - writers_token=writers_token, + writers_token=manager_token, info_type_uu_id=info_type_reno_uu_id, item_comment="Hali hazırda yöneticilik görevini ifa eden 4 nolu daire sahibi Mehmet Karatayın bu " - "görevinin devam etmesine ve apartmanın bank hesaplarının kullanımı ile ilgili yetkisinin devam etmesine.", + "görevinin devam etmesine ve apartmanın bank hesaplarının kullanımı ile ilgili yetkisinin devam etmesine.", start_date=start_date, end_date=end_date, - requester=both_apis.local_api + requester=both_apis.local_api, ) run_decision_book_items( - writers_token=writers_token, + writers_token=manager_token, info_type_uu_id=info_type_reno_uu_id, item_comment="Kiriş içinden geçen borunun çıkarılmadan kesilmesine, gerekli tadilatın yapılıp problemin " - "çözülmesine ayrıca bu aşamada yaplımasına onay verilirse her daire kendi radyatölerinin temizliği ve tadilatın yapılmasına.", + "çözülmesine ayrıca bu aşamada yaplımasına onay verilirse her daire kendi radyatölerinin temizliği ve tadilatın yapılmasına.", start_date=start_date, end_date=end_date, - requester=both_apis.local_api + requester=both_apis.local_api, ) run_decision_book_items( - writers_token=writers_token, + writers_token=manager_token, info_type_uu_id=info_type_reno_uu_id, item_comment="Dogalgazdan tadilatında çıkan eski boruların satışının yapılmasına.", start_date=start_date, end_date=end_date, - requester=both_apis.local_api + requester=both_apis.local_api, ) run_decision_book_items( - writers_token=writers_token, + writers_token=manager_token, info_type_uu_id=info_type_reno_uu_id, item_comment="Apartman içinin tadilat yapılması, ışık ve elektrik sisteminin elden geçirilmesine ve elektrik " - "sayaç il panoların kutuya konulmasına, doğalgaz borularının astar boya ile " - "boyanmasına teklif alınarak projec açılması.", + "sayaç il panoların kutuya konulmasına, doğalgaz borularının astar boya ile " + "boyanmasına teklif alınarak projec açılması.", start_date=start_date, end_date=end_date, - requester=both_apis.local_api + requester=both_apis.local_api, ) run_decision_book_items( - writers_token=writers_token, + writers_token=manager_token, info_type_uu_id=info_type_reno_uu_id, item_comment="İç kapı teklif alınarak gerektiğinde tadilatın geliştirilmesi, tek kapı yapılması " - "yada iki kapının alternatifi ile değerlendirilerek fiyat alınması.", + "yada iki kapının alternatifi ile değerlendirilerek fiyat alınması.", start_date=start_date, end_date=end_date, - requester=both_apis.local_api + requester=both_apis.local_api, ) run_decision_book_items( - writers_token=writers_token, + writers_token=manager_token, info_type_uu_id=info_type_reno_uu_id, item_comment="Bina su deposunun temizletilmesi.", start_date=start_date, end_date=end_date, - requester=both_apis.local_api + requester=both_apis.local_api, ) run_decision_book_items( - writers_token=writers_token, + writers_token=manager_token, info_type_uu_id=info_type_reno_uu_id, item_comment="Çatının havalandırma camlarının değiştirilmesi ve onarılması.", start_date=start_date, end_date=end_date, - requester=both_apis.local_api + requester=both_apis.local_api, ) run_decision_book_items( - writers_token=writers_token, + writers_token=manager_token, info_type_uu_id=info_type_inf_uu_id, item_comment="Arka zemin daire sahibinin yoğun yağmurlarda evin su basmaması için " - "arka bölüme saçak yapabilmesine onay verildi.", - requester=both_apis.local_api + "arka bölüme saçak yapabilmesine onay verildi.", + requester=both_apis.local_api, ) - elif assign_people_to_create_item == 4: - pass + # project_lead_creds_occupant = { + # "domain": "evyos.com.tr", + # "access_key": "", + # "password": "string", + # "remember_me": False, + # "password_token": "", + # } + + local_api.selected_object = local_api.login_via_email_and_password( + login_data=login_creds_occupant, + is_password_valid=True, + selection_list=selection_list, + ) + response = both_apis.local_api.post( + endpoint="/build/decision_book/project/list", + data={"query": {"project_no": "BDT-R_2024_1"}}, + ) + print("text", response.text) + print("json", response.json()) + response_json = response.json() + project_uu_id = response_json["data"][0]["uu_id"] + print("project_uu_id", project_uu_id) + exit() + + selected_decision_book_uu_id = list_decision_books(requester=both_apis.local_api)[ + "data" + ][0]["uu_id"] + print("select_company_uu_id", local_api.selected_object)