From 58ee49a1fc30b245b4142d5b0d846fe4e1d298b7 Mon Sep 17 00:00:00 2001 From: berkay Date: Sun, 17 Nov 2024 19:55:17 +0300 Subject: [PATCH] event decision book item updated --- .../decision_book_decision_book.py | 2 +- .../decision_book_decision_book_items.py | 55 ++++++++++++------- databases/sql_models/building/build.py | 2 +- .../sql_models/building/decision_book.py | 49 ++++++++++------- databases/sql_models/sql_operations.py | 10 ++-- service_app_init/initialize_app/initiator.py | 22 +++----- .../migrate_old_data/data/build_parts.json | 42 +++++++------- .../migrate_old_data/runner.py | 39 ++++++------- 8 files changed, 114 insertions(+), 107 deletions(-) diff --git a/api_events/events/decision_book/decision_book_decision_book.py b/api_events/events/decision_book/decision_book_decision_book.py index a34b418..65238c6 100644 --- a/api_events/events/decision_book/decision_book_decision_book.py +++ b/api_events/events/decision_book/decision_book_decision_book.py @@ -117,7 +117,7 @@ class DecisionBookCreateEventMethods(MethodToEvent): ) data_dict["expiry_starts"] = str(data_dict["expiry_starts"]) build_decision_book = BuildDecisionBook.find_or_create(**data_dict) - BuildDecisionBook.save() + build_decision_book.save_and_confirm() return JSONResponse( status_code=status.HTTP_200_OK, content=dict( 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 45c1ccc..cdf4e93 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 @@ -136,8 +136,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): local_date = system_arrow.find_last_day_of_month(local_date) payment_amount = unit_price if not unit_price_is_fixed: - unit_amount = str(build_part_single.due_part_key).replace(" ", "") - unit_amount = unit_amount.replace(str(unit_type).upper(), "") + unit_amount = int(build_part_single.part_net_size) payment_amount = abs(unit_price * float(unit_amount)) * -1 payment_amount = -1 * ( abs(payment_amount) + (50 - float(abs(payment_amount)) % 50) @@ -179,6 +178,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): BuildParts.human_livable == True, BuildParts.build_id == build_id, ) + 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, @@ -193,7 +193,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): end_date = system_arrow.get( system_arrow.get(decision_book.expiry_ends).date() ) - cls.iterate_over_build_parts( + payment_return_dict = cls.iterate_over_build_parts( build_parts_list=build_parts_list.data, payment_types=payment_types, local_date=local_date, @@ -203,12 +203,11 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): unit_price_is_fixed=unit_price_is_fixed, book_payment_dict=book_payment_dict, ) - BuildDecisionBookProjects.save() - return + return payment_return_dict elif data_info_type.key == "BDT-A": local_date = system_arrow.get(system_arrow.get(debit_start_date).date()) end_date = system_arrow.get(system_arrow.get(debit_end_date).date()) - cls.iterate_over_build_parts( + payment_return_dict = cls.iterate_over_build_parts( build_parts_list=build_parts_list.data, payment_types=payment_types, local_date=local_date, @@ -218,8 +217,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): unit_price_is_fixed=unit_price_is_fixed, book_payment_dict=book_payment_dict, ) - BuildDecisionBookProjects.save() - return + return payment_return_dict elif data_info_type.key == "BDT-R" or data_info_type.key == "BDT-L": local_date = system_arrow.get(system_arrow.get(debit_start_date).date()) end_date = system_arrow.get(system_arrow.get(debit_end_date).date()) @@ -230,7 +228,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): BuildDecisionBookProjects.build_decision_book_id == decision_book.id, BuildDecisionBookProjects.project_type == f"{decision_book.decision_type}_{data_info_type.key}", - ).data + ) management_room = BuildParts.filter_one( BuildParts.build_id == build_id, BuildParts.part_no == 0, @@ -242,13 +240,12 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): BuildLivingSpace.build_parts_id == management_room.id, BuildLivingSpace.occupant_type == occupant_man.id, ).data - if not manager_living_space.data: + if not manager_living_space: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail=f"{occupant_man.occupant_description} Living Space is not found. Check manager living space and try again", ) already_book_project_count = already_book_projects.count + 1 - manager_living_space = manager_living_space.get(1) book_project_dict = dict( project_no=f"{data_info_type.key}_{decision_date.year}_{already_book_project_count}", project_name=f"{str(meeting_date)}_{decision_book.decision_type} Project {already_book_projects.count + 1}", @@ -266,10 +263,12 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): book_project_created = BuildDecisionBookProjects.find_or_create( **book_project_dict ) + print('book_project_created', book_project_created) 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}" ) + decision_book_item.save_and_confirm() project_lead = ApiEnumDropdown.filter_by_one( system=True, key="PTT-LDR", enum_class="ProjectTeamTypes" ).data @@ -281,7 +280,7 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): project_team_type_id=project_lead.id, project_team_type_uu_id=str(project_lead.uu_id), ) - BuildDecisionBookProjects.save() + project_person.save_and_confirm() return book_project_created elif data_info_type.key == "BDT-S": @@ -325,18 +324,25 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): decision_book = BuildDecisionBook.filter_one( BuildDecisionBook.id == decision_book_person.build_decision_book_id, ).data - BuildDecisionBookItems.check_meeting_is_valid_to_start_add_attendance( - decision_book=decision_book, - token_dict=token_dict, - ) + book_items = BuildDecisionBookItems.filter_all( BuildDecisionBookItems.build_decision_book_id == decision_book.id, + system=True + ) + if int(book_items.count) < 3: + BuildDecisionBookItems.check_meeting_is_valid_to_start_add_attendance( + decision_book=decision_book, + token_dict=token_dict, + ) + + book_items = BuildDecisionBookItems.filter_all( + BuildDecisionBookItems.build_decision_book_id == decision_book.id, + system=True ) data_dict["item_order"] = int(book_items.count) + 1 data_dict["build_decision_book_id"] = decision_book.id data_dict["build_decision_book_uu_id"] = str(decision_book.uu_id) - data_dict["is_confirmed"] = True data_info_type = ApiEnumDropdown.filter_by_one( system=True, enum_class="BuildDuesTypes", key="BDT-I", @@ -376,9 +382,9 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): data_dict["currency"], ) - 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() + 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, @@ -406,7 +412,14 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent): item_comment += f" {key} | {abs(float(value))} {currency}, " item_comment = item_comment[:-2] 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) + 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}." + 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() + return JSONResponse( status_code=status.HTTP_200_OK, content=dict( diff --git a/databases/sql_models/building/build.py b/databases/sql_models/building/build.py index 93ca32a..c18125b 100644 --- a/databases/sql_models/building/build.py +++ b/databases/sql_models/building/build.py @@ -230,7 +230,7 @@ class Build(CrudCollection, SelectActionWithEmployee): def management_room(self): if management_room := BuildParts.filter_by_one( system=True, id=self.management_room_id, build_id=self.id - ): + ).data: return management_room return None diff --git a/databases/sql_models/building/decision_book.py b/databases/sql_models/building/decision_book.py index 8e11828..1c7364a 100644 --- a/databases/sql_models/building/decision_book.py +++ b/databases/sql_models/building/decision_book.py @@ -566,7 +566,9 @@ class BuildDecisionBookItems(CrudCollection): item_comment: Mapped[str] = mapped_column( Text, nullable=False, comment="Comment Content" ) - item_objection: Mapped[str] = mapped_column(Text) + item_objection: Mapped[str] = mapped_column( + Text, nullable=True, comment="Objection Content" + ) info_is_completed: Mapped[bool] = mapped_column( Boolean, server_default="0", comment="Info process is Completed" ) @@ -599,6 +601,19 @@ class BuildDecisionBookItems(CrudCollection): foreign_keys="BuildDecisionBookProjects.build_decision_book_item_id", ) + __table_args__ = ( + Index("_build_decision_book_item_ndx_01", build_decision_book_id), + Index( + "_build_decision_book_item_ndx_02", + build_decision_book_id, + item_order, + unique=True, + ), + { + "comment": "Decision Book Items that are related to decision taken at building meetings" + }, + ) + @classmethod def select_action(cls, duty_id, token=None): from databases import ( @@ -668,7 +683,7 @@ class BuildDecisionBookItems(CrudCollection): BuildDecisionBookInvitations.id == active_invite.id ).data people_book_attend_count = None - if invitation.invitation_attempt == 1: + if int(invitation.invitation_attempt) == 1: people_book_attend_is_attending = BuildDecisionBookPerson.filter_all( BuildDecisionBookPerson.invite_id == invitation.id, BuildDecisionBookPerson.is_attending == True, @@ -678,7 +693,7 @@ class BuildDecisionBookItems(CrudCollection): [person.id for person in people_book_attend_is_attending.data] ), BuildDecisionBookPersonOccupants.occupant_type_id.in_( - [occupant_type.id for occupant_type in occupant_type_list.data] + [occupant_type.id for occupant_type in occupant_type_list] ), ) people_book_attend_count = people_book_attend.count @@ -719,7 +734,7 @@ class BuildDecisionBookItems(CrudCollection): == person_occupants_pre.build_decision_book_person_id ).data person = People.filter_one(People.id == person_invite_pret.person_id).data - BuildDecisionBookItems.find_or_create( + created_attendance = BuildDecisionBookItems.find_or_create( **book_items_dict, item_order=1, item_comment=comment( @@ -728,6 +743,7 @@ class BuildDecisionBookItems(CrudCollection): full_name=person.full_name, ), ) + created_attendance.save_and_confirm() person_occupants_wrt = BuildDecisionBookPersonOccupants.filter_one( BuildDecisionBookPersonOccupants.invite_id == invitation.id, @@ -738,7 +754,7 @@ class BuildDecisionBookItems(CrudCollection): == person_occupants_wrt.build_decision_book_person_id ).data person = People.filter_one(People.id == person_invite_pret.person_id).data - BuildDecisionBookItems.find_or_create( + created_attendance = BuildDecisionBookItems.find_or_create( **book_items_dict, item_order=2, item_comment=comment( @@ -747,6 +763,7 @@ class BuildDecisionBookItems(CrudCollection): full_name=person.full_name, ), ) + created_attendance.save_and_confirm() person_occupants_mng = BuildDecisionBookPersonOccupants.filter_one( BuildDecisionBookPersonOccupants.invite_id == invitation.id, @@ -757,7 +774,7 @@ class BuildDecisionBookItems(CrudCollection): == person_occupants_mng.build_decision_book_person_id ).data person = People.filter_one(People.id == person_invite_pret.person_id).data - BuildDecisionBookItems.find_or_create( + created_attendance = BuildDecisionBookItems.find_or_create( **book_items_dict, item_order=3, item_comment=comment( @@ -766,20 +783,10 @@ class BuildDecisionBookItems(CrudCollection): full_name=person.full_name, ), ) + created_attendance.save_and_confirm() return people_book_attend_count - __table_args__ = ( - Index("_build_decision_book_item_ndx_01", build_decision_book_id), - Index( - "_build_decision_book_item_ndx_02", - build_decision_book_id, - item_order, - unique=True, - ), - { - "comment": "Decision Book Items that are related to decision taken at building meetings" - }, - ) + class BuildDecisionBookItemsUnapproved(CrudCollection): @@ -875,14 +882,14 @@ class BuildDecisionBookPayments(CrudCollection): ForeignKey("build_parts.id"), nullable=False ) build_parts_uu_id: Mapped[str] = mapped_column( - String, nullable=True, comment="Build Part UUID" + String, nullable=False, comment="Build Part UUID" ) - budget_records_id: Mapped[int] = mapped_column(ForeignKey("account_records.id")) + 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")) + 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" ) diff --git a/databases/sql_models/sql_operations.py b/databases/sql_models/sql_operations.py index f6f724a..2c22e51 100644 --- a/databases/sql_models/sql_operations.py +++ b/databases/sql_models/sql_operations.py @@ -56,14 +56,14 @@ class FilterAttributes: message=str(e.__context__).split("\n")[0], ) - @classmethod - def save_and_confirm(cls): + def save_and_confirm(self): """Saves the updated model to the current entity db.""" try: - cls.is_confirmed = True - cls.__session__.commit() + self.save() + self.update(is_confirmed=True) + self.save() except SQLAlchemyError as e: - cls.raise_http_exception( + self.raise_http_exception( status_code="HTTP_400_BAD_REQUEST", error_case=e.__class__.__name__, data={}, diff --git a/service_app_init/initialize_app/initiator.py b/service_app_init/initialize_app/initiator.py index 58be411..5bc0a33 100644 --- a/service_app_init/initialize_app/initiator.py +++ b/service_app_init/initialize_app/initiator.py @@ -71,12 +71,14 @@ def init_api_enums_build_types(): type_name=insert_type["type_name"], ) created_build_type = BuildTypes.find_or_create(**build_types.model_dump()) - created_build_type.save() - created_build_type.update(is_confirmed=True) - created_build_type.save() + 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", @@ -243,14 +245,4 @@ def init_api_enums_build_types(): key=str(insert_enum["type_code"]).upper(), description=insert_enum["type_name"], ) - created_api_enum.save() - created_api_enum.update(is_confirmed=True) - created_api_enum.save() - - # for insert_meeting_type in insert_meeting_types: - # ApiEnumDropdown.find_or_create( - # enum_class=insert_meeting_type["enum_class"], - # value=insert_meeting_type["value"], - # key=str(insert_meeting_type["key"]).upper(), - # description=insert_meeting_type["description"], - # ) + created_api_enum.save_and_confirm() diff --git a/service_app_test/test_application/migrate_old_data/data/build_parts.json b/service_app_test/test_application/migrate_old_data/data/build_parts.json index 75e0a3b..d3f594f 100644 --- a/service_app_test/test_application/migrate_old_data/data/build_parts.json +++ b/service_app_test/test_application/migrate_old_data/data/build_parts.json @@ -5,8 +5,8 @@ "part_no" : 11, "part_level" : 3, "part_code" : "DAIRE_11", - "part_gross_size" : 95, - "part_net_size" : 90, + "part_gross_size" : 91, + "part_net_size" : 88, "default_accessory" : "0", "human_livable" : true, "due_part_key" : "", @@ -42,8 +42,8 @@ "part_no" : 5, "part_level" : 1, "part_code" : "DAIRE_05", - "part_gross_size" : 95, - "part_net_size" : 90, + "part_gross_size" : 91, + "part_net_size" : 88, "default_accessory" : "0", "human_livable" : true, "due_part_key" : "", @@ -80,7 +80,7 @@ "part_level" : 0, "part_code" : "DAIRE_03", "part_gross_size" : 85, - "part_net_size" : 80, + "part_net_size" : 82, "default_accessory" : "0", "human_livable" : true, "due_part_key" : "", @@ -117,7 +117,7 @@ "part_level" : 0, "part_code" : "DAIRE_02", "part_gross_size" : 85, - "part_net_size" : 80, + "part_net_size" : 82, "default_accessory" : "0", "human_livable" : true, "due_part_key" : "", @@ -153,8 +153,8 @@ "part_no" : 4, "part_level" : 1, "part_code" : "DAIRE_04", - "part_gross_size" : 95, - "part_net_size" : 90, + "part_gross_size" : 91, + "part_net_size" : 88, "default_accessory" : "0", "human_livable" : true, "due_part_key" : "", @@ -190,8 +190,8 @@ "part_no" : 6, "part_level" : 1, "part_code" : "DAIRE_06", - "part_gross_size" : 95, - "part_net_size" : 90, + "part_gross_size" : 91, + "part_net_size" : 88, "default_accessory" : "0", "human_livable" : true, "due_part_key" : "", @@ -227,8 +227,8 @@ "part_no" : 7, "part_level" : 2, "part_code" : "DAIRE_07", - "part_gross_size" : 95, - "part_net_size" : 90, + "part_gross_size" : 91, + "part_net_size" : 88, "default_accessory" : "0", "human_livable" : true, "due_part_key" : "", @@ -264,8 +264,8 @@ "part_no" : 8, "part_level" : 2, "part_code" : "DAIRE_08", - "part_gross_size" : 95, - "part_net_size" : 90, + "part_gross_size" : 91, + "part_net_size" : 88, "default_accessory" : "0", "human_livable" : true, "due_part_key" : "", @@ -301,8 +301,8 @@ "part_no" : 10, "part_level" : 3, "part_code" : "DAIRE_10", - "part_gross_size" : 95, - "part_net_size" : 90, + "part_gross_size" : 91, + "part_net_size" : 88, "default_accessory" : "0", "human_livable" : true, "due_part_key" : "", @@ -338,8 +338,8 @@ "part_no" : 12, "part_level" : 3, "part_code" : "DAIRE_12", - "part_gross_size" : 95, - "part_net_size" : 90, + "part_gross_size" : 91, + "part_net_size" : 88, "default_accessory" : "0", "human_livable" : true, "due_part_key" : "", @@ -375,8 +375,8 @@ "part_no" : 9, "part_level" : 2, "part_code" : "DAIRE_09", - "part_gross_size" : 95, - "part_net_size" : 90, + "part_gross_size" : 91, + "part_net_size" : 88, "default_accessory" : "0", "human_livable" : true, "due_part_key" : "", @@ -413,7 +413,7 @@ "part_level" : 0, "part_code" : "DAIRE_01", "part_gross_size" : 85, - "part_net_size" : 80, + "part_net_size" : 82, "default_accessory" : "0", "human_livable" : true, "due_part_key" : "", 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 3103e67..206ccdc 100644 --- a/service_app_test/test_application/migrate_old_data/runner.py +++ b/service_app_test/test_application/migrate_old_data/runner.py @@ -43,7 +43,7 @@ login_creds_occupant = { "access_key": access_key_president, "password": "string", "remember_me": False, - "password_token": "n6CCVhj0gvEqENWhA7OqG1NNczJWPuPgI2U6G9yE_OS8gIYGkFhqsZ9c0K9He7yx7O7T9zgaj7ZDxb1JVKzTnGIGrpv8mDdOhuB0IV20XsTsir_jzzHspXsrcHDLk6l32_qsI4fLswDPjY0qvB1yqnEjRvHuYGhfPYTifwfax2O2ceNwwYoTFU9P2s4eWzDb" + "password_token": "" } wrt_creds_occupant = { "domain": "evyos.com.tr", @@ -67,38 +67,27 @@ both_apis = BothAPIS() # both_apis.wag_api = wag_api both_apis.local_api = local_api -assign_people_to_create_item = 2 +assign_people_to_create_item = -1 # selection_list = None selection_list = [ - "98f1207d-f241-4cb8-a95a-b51266632cc8", - "a8eaf383-7bb6-489b-b9e8-f19f9fd1c197", + ] # selection_list = None -manager_token = "9TdLKsYaGIrDQrKHnB13SZ5Z7XIjvGRquMBXu4om5z30hKXIH7J55Q" +manager_token = "" writers_token = manager_token people_uu_id_list = [ - "af411e80-29ad-4540-9e74-3c805700f461", - "af411e80-29ad-4540-9e74-3c805700f461", - "af411e80-29ad-4540-9e74-3c805700f461", + # "af411e80-29ad-4540-9e74-3c805700f461", + # "af411e80-29ad-4540-9e74-3c805700f461", + # "af411e80-29ad-4540-9e74-3c805700f461", ] list_of_attendees = [ -"Qsf0XO6c-wTZDhACY66S4Ck21fgW-6E0f1dSi61bSskMAI7qUTH2Eg", -"fjAc8_mktkBw46islaa8H1yM5jptwLcsdDbNz_MuH7gPmZtuNZ4zLw", -"JwVbDMl6CQZTIFu4LEwdEaX8BB6syWPgygF0f3M0fiu9VhPaqdLzfw", -"PFBj2hlhRAFxrxpUMCpE0O_kwKrWvTov4Zxn94MMnYcVMzC1kQNmiQ", -"e8MKAguhQnSyuZtL1UVP4a3xx0zbXGEmLUQrbCEJu15VoO0r33otdA", -"VPmcs0xD3N5RUGDyYRCe-adgvspkhiMb5YWfr7oN8fCvcQq9BTLSkA", -"3xtEg2r1qi8PozE2Qte4fFuz2EjARP8uxRRS18nz6_OFGQ142rZk4g", -"89XH0UXxbujs-uKxBMV8fZEMJkBDnxOr_8ZBbxS7isGD2noY_OpI4w", -"jSb8rH1ZI7BSHYUtBsKsOoTW4LnHDY2JlJhid_YgpIg05CI-veX0fA", -"fMysLzIehzVfYlnqcyPLpaAKaxD8IODe5QXmWbiM1gEVYtUMyTg-xw", -"aS5AydqghcvTGMQHGpi3m9C5OgyQQ_Yyc_jnkNUzrBvuEuNGOgMgPA", + ] living_space_data = dict( - build_parts_uu_id="98f1207d-f241-4cb8-a95a-b51266632cc8", - person_uu_id="07a14d03-d8c8-4d84-9f71-ff81b732b030", - occupant_type_uu_id="a8eaf383-7bb6-489b-b9e8-f19f9fd1c197", + build_parts_uu_id="", + person_uu_id="", + occupant_type_uu_id="", expiry_starts=arrow.now().date().__str__(), ) @@ -181,6 +170,12 @@ elif assign_people_to_create_item == 3: is_password_valid=True, selection_list=selection_list, ) + + """ + + """ + debit_type_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