project item updated

This commit is contained in:
berkay 2024-11-20 14:12:56 +03:00
parent 0b3e0c299c
commit 73d41b8e10
8 changed files with 197 additions and 63 deletions

View File

@ -310,7 +310,6 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
service_id=related_service.id, service_id=related_service.id,
build_living_space_id=project_leader.id, build_living_space_id=project_leader.id,
) )
project_person = BuildDecisionBookProjectPerson.find_or_create( project_person = BuildDecisionBookProjectPerson.find_or_create(
build_decision_book_project_id=book_project_created.id, build_decision_book_project_id=book_project_created.id,
build_decision_book_project_uu_id=str(book_project_created.uu_id), build_decision_book_project_uu_id=str(book_project_created.uu_id),
@ -318,8 +317,12 @@ class DecisionBookDecisionBookItemsCreateEventMethods(MethodToEvent):
living_space_uu_id=str(project_leader.uu_id), living_space_uu_id=str(project_leader.uu_id),
) )
project_person.save_and_confirm() project_person.save_and_confirm()
book_project_created.update(
project_response_living_space_id=project_leader.id,
project_response_living_space_uu_id=str(project_leader.uu_id),
)
book_project_created.save()
return book_project_created return book_project_created
elif data_info_type.key == "BDT-S": elif data_info_type.key == "BDT-S":
raise HTTPException( raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST, status_code=status.HTTP_400_BAD_REQUEST,

View File

@ -157,7 +157,6 @@ class ProjectDecisionBookUpdateEventMethods(MethodToEvent):
message="Living space not found", message="Living space not found",
data={}, data={},
) )
occupant_type = OccupantTypes.filter_by_one( occupant_type = OccupantTypes.filter_by_one(
occupant_category_type="PRJ", occupant_category_type="PRJ",
occupant_code="PRJ-LDR", occupant_code="PRJ-LDR",
@ -170,11 +169,10 @@ class ProjectDecisionBookUpdateEventMethods(MethodToEvent):
message=f"{token_dict.selected_occupant.occupant_type_uu_id} occupant type is not allowed, only PRJ-LDR occupant type is allowed", message=f"{token_dict.selected_occupant.occupant_type_uu_id} occupant type is not allowed, only PRJ-LDR occupant type is allowed",
data={}, data={},
) )
decision_book_project_person = BuildDecisionBookProjectPerson.filter_one( decision_book_project_person = BuildDecisionBookProjectPerson.filter_one(
BuildDecisionBookProjects.build_decision_book_project_uu_id BuildDecisionBookProjectPerson.build_decision_book_project_uu_id
== data.get("build_decision_book_project_uu_id"), == data.build_decision_book_project_uu_id,
BuildDecisionBookProjects.living_space_id BuildDecisionBookProjectPerson.living_space_id
== token_dict.selected_occupant.living_space_id, == token_dict.selected_occupant.living_space_id,
).data ).data
if not decision_book_project_person: if not decision_book_project_person:
@ -237,6 +235,7 @@ class ProjectDecisionBookApprovalEventMethods(MethodToEvent):
data={}, data={},
) )
occupant_type = OccupantTypes.filter_by_one( occupant_type = OccupantTypes.filter_by_one(
system=True,
occupant_category_type="PRJ", occupant_category_type="PRJ",
occupant_code="PRJ-LDR", occupant_code="PRJ-LDR",
id=living_space.occupant_type, id=living_space.occupant_type,
@ -248,15 +247,14 @@ class ProjectDecisionBookApprovalEventMethods(MethodToEvent):
message=f"{token_dict.selected_occupant.occupant_type_uu_id} occupant type is not allowed, only PRJ-LDR occupant type is allowed", message=f"{token_dict.selected_occupant.occupant_type_uu_id} occupant type is not allowed, only PRJ-LDR occupant type is allowed",
data={}, data={},
) )
decision_book_project_person = BuildDecisionBookProjectPerson.filter_one( decision_book_project_person = BuildDecisionBookProjectPerson.filter_one(
BuildDecisionBookProjects.build_decision_book_project_uu_id BuildDecisionBookProjectPerson.build_decision_book_project_uu_id
== data.get("build_decision_book_project_uu_id"), == data.build_decision_book_project_uu_id,
BuildDecisionBookProjects.living_space_id BuildDecisionBookProjectPerson.living_space_id
== token_dict.selected_occupant.living_space_id, == token_dict.selected_occupant.living_space_id,
).data ).data
if not decision_book_project_person: if not decision_book_project_person:
raise BuildDecisionBookProjects.raise_http_exception( raise BuildDecisionBookProjectPerson.raise_http_exception(
status_code="HTTP_404_NOT_FOUND", status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND", error_case="NOT_FOUND",
message="This project is not allowed for this occupant", message="This project is not allowed for this occupant",
@ -275,7 +273,6 @@ class ProjectDecisionBookApprovalEventMethods(MethodToEvent):
) )
data_dict = data.excluded_dump() data_dict = data.excluded_dump()
data_dict["is_completed"] = True data_dict["is_completed"] = True
data_dict["status_id"] = 1 # is completed status
build_parts_list = BuildParts.filter_all( build_parts_list = BuildParts.filter_all(
BuildParts.human_livable == True, BuildParts.human_livable == True,
@ -288,13 +285,12 @@ class ProjectDecisionBookApprovalEventMethods(MethodToEvent):
).data ).data
book_payment_dict = dict( book_payment_dict = dict(
payment_plan_time_periods=str(),
build_decision_book_item_id=decision_book_project_item.id, build_decision_book_item_id=decision_book_project_item.id,
build_decision_book_item_uu_id=str(decision_book_project_item.uu_id), build_decision_book_item_uu_id=str(decision_book_project_item.uu_id),
currency=decision_book_project.currency, currency=decision_book_project.currency,
) )
payment_type = ApiEnumDropdown.get_debit_search(search_debit="DT-D") payment_type = ApiEnumDropdown.get_debit_search(search_debit="DT-D")
for final_price in data.final_price_list: for final_price in data.final_price_list or []:
for build_part_single in build_parts_list: for build_part_single in build_parts_list:
local_date = BuildDecisionBookPayments.client_arrow.get( local_date = BuildDecisionBookPayments.client_arrow.get(
str(final_price["date"]) str(final_price["date"])

View File

@ -14,6 +14,7 @@ from api_validations.validations_request import (
from api_events.events.abstract_class import MethodToEvent, ActionsSchema from api_events.events.abstract_class import MethodToEvent, ActionsSchema
from api_objects.auth.token_objects import EmployeeTokenObject, OccupantTokenObject from api_objects.auth.token_objects import EmployeeTokenObject, OccupantTokenObject
from api_validations.core_response import AlchemyJsonResponse from api_validations.core_response import AlchemyJsonResponse
from databases.sql_models.building.decision_book import BuildDecisionBookProjects
class BuildDecisionBookProjectItemsListEventMethods(MethodToEvent): class BuildDecisionBookProjectItemsListEventMethods(MethodToEvent):
@ -47,16 +48,35 @@ class BuildDecisionBookProjectItemsCreateEventMethods(MethodToEvent):
@staticmethod @staticmethod
def build_decision_book_project_items_create( def build_decision_book_project_items_create(
requester: Union[EmployeeTokenObject, OccupantTokenObject], token_dict: Union[EmployeeTokenObject, OccupantTokenObject],
decision_book_project_items: InsertBuildDecisionBookProjectItems, data: InsertBuildDecisionBookProjectItems,
): ):
response = BuildDecisionBookProjectItems.create_item( if isinstance(token_dict, EmployeeTokenObject):
requester=requester, raise BuildDecisionBookProjectItems.raise_http_exception(
decision_book_project_items=decision_book_project_items, status_code="HTTP_403_FORBIDDEN",
error_case="UNAUTHORIZED",
message=f"No permission to create decision book project items",
data={},
) )
elif isinstance(token_dict, OccupantTokenObject):
book_project = BuildDecisionBookProjects.filter_one(
BuildDecisionBookProjects.uu_id == data.build_decision_book_project_uu_id,
BuildDecisionBookProjects.project_response_living_space_id == token_dict.selected_occupant.living_space_id
).data
if not book_project:
raise BuildDecisionBookProjectItems.raise_http_exception(
status_code="HTTP_404_NOT_FOUND",
error_case="NOT_FOUND",
message=f"This user can not create project item for this project uu_id : {data.build_decision_book_project_uu_id}",
data={},
)
data_dict = data.excluded_dump()
data_dict["build_decision_book_project_id"] = book_project.id
created_project_item = BuildDecisionBookProjectItems.find_or_create(**data_dict)
created_project_item.save_and_confirm()
return AlchemyJsonResponse( return AlchemyJsonResponse(
message="Build Decision Book Project Items Create", message="Build Decision Book Project Items Create",
result=response, result=created_project_item.get_dict(),
) )

View File

@ -77,8 +77,9 @@ class UpdateBuildDecisionBookProjects(PydanticBaseModel):
class ApprovalsBuildDecisionBookProjects(PydanticBaseModel): class ApprovalsBuildDecisionBookProjects(PydanticBaseModel):
build_decision_book_project_uu_id: str build_decision_book_project_uu_id: str
final_price_list: list[dict] # {"date": "2021-01-01", "price": 1000}
project_stop_date: str project_stop_date: str
status_code: Optional[int] = None
final_price_list: Optional[list[dict]] = None # {"date": "2021-01-01", "price": 1000}
class InsertBuildDecisionBookProjectItemDebits(PydanticBaseModel): class InsertBuildDecisionBookProjectItemDebits(PydanticBaseModel):

View File

@ -1018,7 +1018,6 @@ class BuildDecisionBookProjects(CrudCollection):
project_start_date: Mapped[TIMESTAMP] = mapped_column( project_start_date: Mapped[TIMESTAMP] = mapped_column(
TIMESTAMP, nullable=False, comment="Project Start Date" TIMESTAMP, nullable=False, comment="Project Start Date"
) )
project_stop_date: Mapped[TIMESTAMP] = mapped_column( project_stop_date: Mapped[TIMESTAMP] = mapped_column(
TIMESTAMP, server_default="2099-12-31 23:59:59" TIMESTAMP, server_default="2099-12-31 23:59:59"
) )
@ -1031,7 +1030,7 @@ class BuildDecisionBookProjects(CrudCollection):
is_completed: Mapped[bool] = mapped_column( is_completed: Mapped[bool] = mapped_column(
Boolean, server_default="0", comment="Project is Completed" Boolean, server_default="0", comment="Project is Completed"
) )
status_id: Mapped[int] = mapped_column(SmallInteger, nullable=True) status_code: Mapped[int] = mapped_column(SmallInteger, nullable=True)
resp_company_fix_wage: Mapped[float] = mapped_column( resp_company_fix_wage: Mapped[float] = mapped_column(
Numeric(10, 2), server_default="0" Numeric(10, 2), server_default="0"
) )
@ -1040,7 +1039,7 @@ class BuildDecisionBookProjects(CrudCollection):
meeting_date: Mapped[TIMESTAMP] = mapped_column( meeting_date: Mapped[TIMESTAMP] = mapped_column(
TIMESTAMP, server_default="1900-01-01 00:00:00", index=True TIMESTAMP, server_default="1900-01-01 00:00:00", index=True
) )
currency: Mapped[float] = mapped_column(String(8), server_default="TRY") currency: Mapped[str] = mapped_column(String(8), server_default="TRY")
bid_price: Mapped[float] = mapped_column(Numeric(16, 4), server_default="0") bid_price: Mapped[float] = mapped_column(Numeric(16, 4), server_default="0")
approved_price: Mapped[float] = mapped_column(Numeric(16, 4), server_default="0") approved_price: Mapped[float] = mapped_column(Numeric(16, 4), server_default="0")
final_price: Mapped[float] = mapped_column(Numeric(16, 4), server_default="0") final_price: Mapped[float] = mapped_column(Numeric(16, 4), server_default="0")
@ -1057,7 +1056,7 @@ class BuildDecisionBookProjects(CrudCollection):
build_decision_book_uu_id: Mapped[str] = mapped_column( build_decision_book_uu_id: Mapped[str] = mapped_column(
String, nullable=True, comment="Decision Book UUID" String, nullable=True, comment="Decision Book UUID"
) )
build_decision_book_item_id = mapped_column( build_decision_book_item_id: Mapped[int] = mapped_column(
ForeignKey("build_decision_book_items.id"), nullable=False ForeignKey("build_decision_book_items.id"), nullable=False
) )
build_decision_book_item_uu_id: Mapped[str] = mapped_column( build_decision_book_item_uu_id: Mapped[str] = mapped_column(

View File

@ -51,7 +51,7 @@ def build_decision_book_project_people_update(
@build_decision_book_project_route.post( @build_decision_book_project_route.post(
path="/approval/{build_decision_book_project_id}", path="/approval",
summary="Approval people from Build Decision Book Project People with given auth levels", summary="Approval people from Build Decision Book Project People with given auth levels",
) )
def build_decision_book_project_invite_approval( def build_decision_book_project_invite_approval(

View File

@ -28,8 +28,9 @@ def generate_approval_project_item(**kwargs):
"build_decision_book_project_uu_id": kwargs.get( "build_decision_book_project_uu_id": kwargs.get(
"build_decision_book_project_uu_id", None "build_decision_book_project_uu_id", None
), ),
"final_price_list": kwargs.get("final_price_list", []), "final_price_list": kwargs.get("final_price_list", None),
"project_stop_date": kwargs.get("project_stop_date", None), "project_stop_date": kwargs.get("project_stop_date", None),
"status_code": kwargs.get("status_code", None),
} }
@ -43,7 +44,7 @@ def generate_insert_project_item(**kwargs):
} }
def create_decision_book_items(requester, insert_project_item): def create_decision_book_project_items(requester, insert_project_item):
response = requester.post( 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
) )
@ -66,3 +67,16 @@ def approve_build_decision_book_project_approval(requester, approval_project_ite
) )
print("text", response.text) print("text", response.text)
print("json", response.json()) print("json", response.json())
def list_decision_book_project(requester, project_no):
response = requester.post(
endpoint="/build/decision_book/project/list",
data={"query": {"project_no": project_no}},
)
print("text", response.text)
print("json", response.json())
response_json = response.json()
# project = response_json["data"][0]["uu_id"]
project = response_json["data"][0]
return project

View File

@ -1,3 +1,5 @@
import json
import arrow import arrow
from service_app_test.bases import RequestToApi from service_app_test.bases import RequestToApi
@ -30,10 +32,11 @@ from service_app_test.test_application.migrate_old_data.accounts import (
from service_app_test.test_application.migrate_old_data.decision_book_project import ( from service_app_test.test_application.migrate_old_data.decision_book_project import (
approve_build_decision_book_project_approval, approve_build_decision_book_project_approval,
update_decision_book_project, update_decision_book_project,
create_decision_book_items, create_decision_book_project_items,
generate_insert_project_item, generate_insert_project_item,
generate_update_project_item, generate_update_project_item,
generate_approval_project_item, generate_approval_project_item,
list_decision_book_project,
) )
local_api = RequestToApi() local_api = RequestToApi()
@ -42,8 +45,13 @@ local_api.overwrite_base_url(base_url=LocalAPI.base_url)
both_apis = BothAPIS() both_apis = BothAPIS()
both_apis.local_api = local_api both_apis.local_api = local_api
password_token = ""
password_token_occ = "" def decode_as_json_indent(data):
return json.dumps(json.loads(json.dumps(data)), indent=2)
password_token = "FGS095it2IBP3gIp5glaG6u9tQy1KEPzKnBYE1fvGJSGvGUhwaGgxE-56yZAxUQnW-a_J91twOFKTWTc0ue4GZq10vY7fK2cZBsR9bUDJMCHZZZGpFYbsE6pLyaDs-1_K8v5hbggSmpXNFfafMmujuXxqvSzdLQa5hcg9qepHBOvgTbL28wGRHx9w-Fcb7bL"
password_token_occ = "kM9vHcWZVVF38IyNxMk6XMlCc8FCc_P1D-0D2u-Er5FrcQzvswSjJe9Lu9QnhJ5fJw5WqC45UYxopme_aCX6YDfZfQ3wQ9RP4Ak5YYTWBZbtwKGXTomlpYCQJghy0RC-1-Q9ATNEgcjYXqU2P9UjjdS9JNvhUawT0R38wXap-Mum6oazjqiKow41SUebnZ-H"
login_data = { login_data = {
"domain": "evyos.com.tr", "domain": "evyos.com.tr",
"access_key": "karatay.berkay.sup@evyos.com.tr", "access_key": "karatay.berkay.sup@evyos.com.tr",
@ -59,15 +67,28 @@ login_creds_occupant = {
"password_token": password_token_occ, "password_token": password_token_occ,
} }
selection_list = [ selection_list = [
# "523dbcd3-fe87-4208-86c2-da45204dfafc", "d9ffa716-331c-48fc-83b2-47bf31289b3e",
# "24aed2e5-bca0-4657-a056-badf9b3aa81c", "afebb7f8-9f62-4703-b11c-ee8f14fe73b7",
] ]
manager_token = "" manager_token = "g0Z1YYjh2WqFfoI3MdJ9wrfXAHeL6f7UatEkySzOK0dFX6CH1sXgjQ"
people_uu_id = "" people_uu_id = "2c8781f6-c1bc-432d-bb0c-9f5247ecc750"
list_of_attendees = [] list_of_attendees = [
"_Ky6UyaoatH5CZEQHZ1gdoj_7HDxSJ2DgBwq6hSXbCKR-WG8E9DPuQ",
"KhdJF7XP6ni_qdIRXSByGHKez8oTSbmzOAZxdi2A_iy-oOW6-VbfPA",
"vn01wNh5moTiNzw2qOvT4h5eqgCQ10jmN3OK659NN-ekriFSmVju_Q",
"EMsteygK4Myingptlpi_sr7Xu0Wsrl7xpQD-ukVY4GBjv6NJakpQ4Q",
"26p4QD1CofK6-Pk_VyDOB2Xstdv_sx88kh4kResWg4TuCuAy7tAT-A",
"2FgntLgLfFM20d32-gOwaHu44Vk_fDlpOh8IvS8gahiW-V0Dv0qLWg",
"TwC_dNuT6Iln0NFinEuvxbnjmb_HwcS8qWg-097gjc8pHTQ1p0nTGA",
"Yn35HP9TJonn9PTFpsq1lH3w-x-zHjTWymBeP6v4XPcwJP_aMj8JsQ",
"C2DbYn1jcocKwjQ8gvJ_jCU0IGAmbJB3JgHj-N_OTu1jNtmhVrW7aQ",
"TT5-9a_JVSf_WBAcN1sAfUyV45J2e7J1NoVGe3BcrrlAI1GNoU2_rw",
"ED4H5zpmxpLXX5rO6eoTb7wIa2x1v0YbNwsFh-iAohWh7fDyhvq_BQ",
]
constant = "Toplantı sonucunda araştırmalar tamamlandı, katılımcılara e-posta gönderildi. Onaylayan sayısı yeterli olmadığı için karar alınamadı ve proje iptal edildi ve sonlandırıldı."
assign_people_to_create_item = -1 assign_people_to_create_item = 4
if assign_people_to_create_item == -1: if assign_people_to_create_item == -1:
local_api.selected_object = local_api.login_via_email_and_password( local_api.selected_object = local_api.login_via_email_and_password(
login_data=login_data, is_password_valid=False login_data=login_data, is_password_valid=False
@ -290,31 +311,111 @@ elif assign_people_to_create_item == 3:
requester=both_apis.local_api, requester=both_apis.local_api,
) )
elif assign_people_to_create_item == 4: elif assign_people_to_create_item == 4:
# 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( local_api.selected_object = local_api.login_via_email_and_password(
login_data=login_creds_occupant, login_data=login_creds_occupant,
is_password_valid=True, is_password_valid=True,
selection_list=selection_list, selection_list=selection_list,
) )
response = both_apis.local_api.post( # for i in range(8):
endpoint="/build/decision_book/project/list", # index = i + 1
data={"query": {"project_no": "BDT-R_2024_1"}}, # print("index", index)
) # if index in [1, 7, 8]:
print("text", response.text) # continue
print("json", response.json()) # project_no = f"BDT-R_2024_{index}"
response_json = response.json() # project = list_decision_book_project(
project_uu_id = response_json["data"][0]["uu_id"] # requester=both_apis.local_api, project_no=project_no
print("project_uu_id", project_uu_id) # )
exit() # print("project", decode_as_json_indent(project))
# project_uu_id = project["uu_id"]
#
# insert_project_item = generate_insert_project_item(
# **{
# "build_decision_book_project_uu_id": project_uu_id,
# "item_header": "Toplantı sonrası alınan kararlar",
# "item_comment": constant,
# }
# )
# create_decision_book_project_items(
# insert_project_item=insert_project_item, requester=both_apis.local_api
# )
# approve_project_item = {
# "build_decision_book_project_uu_id": project_uu_id,
# "project_stop_date": "2024-12-01",
# "status_code": 9
# }
# approve_build_decision_book_project_approval(
# approval_project_item=generate_approval_project_item(**approve_project_item),
# requester=both_apis.local_api,
# )
#
# project = list_decision_book_project(
# requester=both_apis.local_api, project_no=project_no
# )
# print("project", decode_as_json_indent(project))
selected_decision_book_uu_id = list_decision_books(requester=both_apis.local_api)[ project_no = f"BDT-R_2024_7"
"data" project = list_decision_book_project(
][0]["uu_id"] requester=both_apis.local_api, project_no=project_no
print("select_company_uu_id", local_api.selected_object) )
print("project", decode_as_json_indent(project))
project_uu_id = project["uu_id"]
approve_project_item = lambda final_price_list : {
"build_decision_book_project_uu_id": project_uu_id,
"project_stop_date": "2024-12-01",
"final_price_list": final_price_list,
"status_code": 9
}
approve_project_dict = approve_project_item(
[{"date": "2024-11-03", "price": 585.00}]
)
insert_project_item = generate_insert_project_item(
**{
"build_decision_book_project_uu_id": project_uu_id,
"item_header": "Toplantı sonrası alınan kararlar",
"item_comment": "Bina çalışmaları sonucunda 7020 ₺ lik maliyet çıkmıştır.",
}
)
create_decision_book_project_items(
insert_project_item=insert_project_item, requester=both_apis.local_api
)
approve_build_decision_book_project_approval(
approval_project_item=generate_approval_project_item(**approve_project_dict),
requester=both_apis.local_api,
)
project = list_decision_book_project(
requester=both_apis.local_api, project_no=project_no
)
print("project", decode_as_json_indent(project))
project_no = f"BDT-R_2024_8"
project = list_decision_book_project(
requester=both_apis.local_api, project_no=project_no
)
print("project", decode_as_json_indent(project))
project_uu_id = project["uu_id"]
approve_project_dict = approve_project_item(
[{"date": "2024-12-01", "price": 600.25}, {"date": "2025-01-01", "price": 600.50}]
)
insert_project_item = generate_insert_project_item(
**{
"build_decision_book_project_uu_id": project_uu_id,
"item_header": "Toplantı sonrası alınan kararlar",
"item_comment": "Bina çalışmaları sonucunda 12500 ₺ lik maliyet çıkmıştır.",
}
)
create_decision_book_project_items(
insert_project_item=insert_project_item, requester=both_apis.local_api
)
approve_build_decision_book_project_approval(
approval_project_item=generate_approval_project_item(**approve_project_dict),
requester=both_apis.local_api,
)
project = list_decision_book_project(
requester=both_apis.local_api, project_no=project_no
)
print("project", decode_as_json_indent(project))