project budget updated
This commit is contained in:
parent
48682b1914
commit
0b3e0c299c
|
|
@ -0,0 +1 @@
|
|||
|
||||
|
|
@ -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
|
||||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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={},
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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"},
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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"},
|
||||
)
|
||||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
# """
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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"],
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue