project budget updated

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

View File

@ -0,0 +1 @@

View File

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

View File

@ -3,6 +3,9 @@ import typing
from fastapi import status, HTTPException
from fastapi.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()

View File

@ -70,9 +70,7 @@ class DecisionBookPersonAddEventMethods(MethodToEvent):
detail=f"No Decision Book is match with given UUID {data.build_decision_book_uu_id}",
)
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(

View File

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

View File

@ -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,13 +30,13 @@ 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(
def project_decision_book_list(
cls,
data: ListOptions,
list_options: ListOptions,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
):
if isinstance(token_dict, EmployeeTokenObject):
@ -45,15 +44,23 @@ class ProjectDecisionBookListEventMethods(MethodToEvent):
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,
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={},
)
decision_book_ids = [_.build_decision_book_project_id for _ in project_person.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",
@ -81,35 +88,35 @@ class ProjectDecisionBookCreateEventMethods(MethodToEvent):
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",
@ -137,53 +144,56 @@ class ProjectDecisionBookUpdateEventMethods(MethodToEvent):
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)
@ -213,53 +223,55 @@ class ProjectDecisionBookApprovalEventMethods(MethodToEvent):
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
@ -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(
@ -327,29 +342,18 @@ class ProjectDecisionBookPatchEventMethods(MethodToEvent):
return
ProjectDecisionBookListEventMethod = (
ProjectDecisionBookListEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/person/list")
ProjectDecisionBookListEventMethod = ProjectDecisionBookListEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/list")
)
)
ProjectDecisionBookCreateEventMethod = (
ProjectDecisionBookCreateEventMethods(
ProjectDecisionBookCreateEventMethod = ProjectDecisionBookCreateEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/create")
)
)
ProjectDecisionBookUpdateEventMethod = (
ProjectDecisionBookUpdateEventMethods(
ProjectDecisionBookUpdateEventMethod = ProjectDecisionBookUpdateEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/update")
)
)
ProjectDecisionBookApprovalEventMethod = (
ProjectDecisionBookApprovalEventMethods(
ProjectDecisionBookApprovalEventMethod = ProjectDecisionBookApprovalEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/approval")
)
)
ProjectDecisionBookPatchEventMethod = (
ProjectDecisionBookPatchEventMethods(
ProjectDecisionBookPatchEventMethod = ProjectDecisionBookPatchEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/patch")
)
)

View File

@ -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={},
)

View File

@ -27,7 +27,7 @@ class ProjectDecisionBookPersonListEventMethods(MethodToEvent):
@classmethod
def project_decision_book_person_list(
cls,
data: ListOptions,
list_options: ListOptions,
token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
):
if isinstance(token_dict, EmployeeTokenObject):
@ -35,19 +35,24 @@ class ProjectDecisionBookPersonListEventMethods(MethodToEvent):
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,
)
@ -71,12 +76,14 @@ class ProjectDecisionBookPersonCreateEventMethods(MethodToEvent):
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",
@ -104,12 +111,14 @@ class ProjectDecisionBookPersonUpdateEventMethods(MethodToEvent):
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(
@ -138,12 +147,14 @@ class ProjectDecisionBookPersonPatchEventMethods(MethodToEvent):
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,11 +163,9 @@ class ProjectDecisionBookPersonPatchEventMethods(MethodToEvent):
)
ProjectDecisionBookPersonListEventMethod = (
ProjectDecisionBookPersonListEventMethods(
ProjectDecisionBookPersonListEventMethod = ProjectDecisionBookPersonListEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/people/list")
)
)
ProjectDecisionBookPersonCreateEventMethod = (
ProjectDecisionBookPersonCreateEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/people/create")
@ -167,8 +176,6 @@ ProjectDecisionBookPersonUpdateEventMethod = (
action=ActionsSchema(endpoint="/build/decision_book/project/people/update")
)
)
ProjectDecisionBookPersonPatchEventMethod = (
ProjectDecisionBookPersonPatchEventMethods(
ProjectDecisionBookPersonPatchEventMethod = ProjectDecisionBookPersonPatchEventMethods(
action=ActionsSchema(endpoint="/build/decision_book/project/people/patch")
)
)

View File

@ -17,6 +17,15 @@ from api_events.tasks2events.occupant_tasks.meeting_president import (
from api_events.tasks2events.occupant_tasks.meeting_voted_president import (
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",
]

View File

@ -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):

View File

@ -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):

View File

@ -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):

View File

@ -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

View File

@ -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",

View File

@ -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"},
)

View File

@ -0,0 +1,157 @@
from sqlalchemy import (
String,
ForeignKey,
Index,
SmallInteger,
Boolean,
TIMESTAMP,
Text,
Numeric,
Integer,
)
from sqlalchemy.orm import mapped_column, Mapped, relationship
from databases.sql_models.core_mixin import CrudCollection
class DecisionBookBudgetBooks(CrudCollection):
__tablename__ = "decision_book_budget_books"
__exclude__fields__ = []
country: Mapped[str] = mapped_column(String, nullable=False)
branch_type: Mapped[int] = mapped_column(SmallInteger, server_default="0")
company_id: Mapped[int] = mapped_column(ForeignKey("companies.id"), nullable=False)
company_uu_id: Mapped[str] = mapped_column(String, nullable=False)
branch_id: Mapped[int] = mapped_column(ForeignKey("companies.id"), nullable=True)
branch_uu_id: Mapped[str] = mapped_column(
String, comment="Branch UU ID", nullable=True
)
build_decision_book_id: Mapped[int] = mapped_column(
ForeignKey("build_decision_book.id"), nullable=False
)
build_decision_book_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Build Decision Book UU ID"
)
__table_args__ = (
Index(
"_decision_book_budget_companies_book_ndx_00",
company_id,
CrudCollection.created_at,
),
{"comment": "budget Book Information"},
)
class DecisionBookBudgetCodes(CrudCollection):
__tablename__ = "decision_book_budget_codes"
__exclude__fields__ = []
budget_code: Mapped[str] = mapped_column(
String(48), nullable=False, comment="budget Code"
)
comment_line: Mapped[str] = mapped_column(
Text, nullable=False, comment="Comment Line"
)
build_decision_book_id: Mapped[int] = mapped_column(
ForeignKey("build_decision_book.id"), nullable=True
)
build_decision_book_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Build Decision Book UU ID"
)
build_parts_id: Mapped[int] = mapped_column(
ForeignKey("build_parts.id"), nullable=True
)
build_parts_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Build Parts UU ID"
)
company_id: Mapped[int] = mapped_column(ForeignKey("companies.id"), nullable=True)
company_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Company UU ID"
)
__table_args__ = (
Index("_decision_book_budget_codes_ndx_00", budget_code, "created_at"),
Index("_decision_book_budget_codes_ndx_01", company_id, "created_at"),
{"comment": "budget Book Information"},
)
class DecisionBookBudgetMaster(CrudCollection):
__tablename__ = "decision_book_budget_master"
__exclude__fields__ = []
budget_type: Mapped[str] = mapped_column(
String(50), nullable=False
) # Bütçe tipi (örneğin: Operasyonel, Yatırım)
currency: Mapped[str] = mapped_column(
String(8), server_default="TRY"
) # Bütçe para birimi
total_budget: Mapped[float] = mapped_column(
Numeric(10, 2), nullable=False
) # Toplam bütçe
tracking_period_id: Mapped[int] = mapped_column(
ForeignKey("api_enum_dropdown.id"), nullable=True
)
tracking_period_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Part Direction UUID"
)
budget_books_id: Mapped[int] = mapped_column(
Integer, ForeignKey("decision_book_budget_books.id"), nullable=False
)
budget_books_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Budget Books UU ID"
)
department_id: Mapped[int] = mapped_column(
Integer, ForeignKey("departments.id"), nullable=False
) # Departman ile ilişki
department_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Department UU ID"
)
__table_args__ = ({"comment": "budget Book Information"},)
class DecisionBookBudgets(CrudCollection):
__tablename__ = "decision_book_budgets"
__exclude__fields__ = []
process_date: Mapped[TIMESTAMP] = mapped_column(
TIMESTAMP, nullable=False
) # Başlangıç tarihi
budget_codes_id: Mapped[int] = mapped_column(
Integer, ForeignKey("decision_book_budget_codes.id"), nullable=False
)
total_budget: Mapped[float] = mapped_column(
Numeric(10, 2), nullable=False
) # Toplam bütçe
used_budget: Mapped[float] = mapped_column(
Numeric(10, 2), nullable=False, default=0.0
) # Kullanılan bütçe
remaining_budget: Mapped[float] = mapped_column(
Numeric(10, 2), nullable=False, default=0.0
) # Kullanılan bütçe
decision_book_budget_master_id: Mapped[int] = mapped_column(
Integer, ForeignKey("decision_book_budget_master.id"), nullable=False
)
decision_book_budget_master_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Decision Book Budget Master UU ID"
)
__table_args__ = (
Index(
"_decision_book_budgets_ndx_00",
decision_book_budget_master_uu_id,
process_date,
),
{"comment": "budget Book Information"},
)

View File

@ -549,6 +549,7 @@ class BuildLivingSpace(CrudCollection):
occupant_type_uu_id: Mapped[str] = mapped_column(
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()

View File

@ -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):
# """

View File

@ -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",
]

View File

@ -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)

View File

@ -10,7 +10,8 @@ from api_services.redis.auth_actions.token import parse_token_object_to_dict
build_decision_book_project_items_route = APIRouter(
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)
@ -41,13 +47,13 @@ def build_decision_book_project_people_items_create(request: Request, data: Inse
def build_decision_book_project_people_items_update(
request: Request,
build_decision_book_project_item_uu_id: str,
data: UpdateBuildDecisionBookProjectItems
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,
)
@ -62,5 +68,5 @@ def build_decision_book_project_people_items_patch(
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,
)

View File

@ -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,
)

View File

@ -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"],

View File

@ -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

View File

@ -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())

View File

@ -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.",
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.",
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.",
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.",
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ı.",
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ı.",
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
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)