Skip to content

Commit ba90890

Browse files
authored
[COMP-766-2] Added historical and linkable order creation methods (#713)
1 parent 78c8092 commit ba90890

File tree

21 files changed

+583
-101
lines changed

21 files changed

+583
-101
lines changed

compliance-api/src/compliance_api/models/administrative_penalty.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ def get_by_administrative_penalty_number(cls, administrative_penalty_number):
308308
).first()
309309

310310
@classmethod
311-
def get_count_by_project_nd_case_file_id(cls, project_id: int, case_file_id: int):
311+
def get_count_by_project_and_case_file_id(cls, project_id: int, case_file_id: int):
312312
"""Get count of administrative penalties by project and case file id."""
313313
result = (
314314
cls.query.join(InspectionModel, InspectionModel.id == cls.inspection_id)

compliance-api/src/compliance_api/models/charge_recommendation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ def get_by_charge_recommendation_number(
350350

351351
@classmethod
352352
@with_session
353-
def get_count_by_project_nd_case_file_id(
353+
def get_count_by_project_and_case_file_id(
354354
cls, project_id: int, case_file_id: int, session=None
355355
):
356356
"""Get count of charge recommendations by project and case file id."""

compliance-api/src/compliance_api/models/complaint/complaint.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ class Complaint(BaseModelVersioned):
171171
)
172172

173173
@classmethod
174-
def get_count_by_project_nd_case_file_id(cls, project_id: int, case_file_id: int):
174+
def get_count_by_project_and_case_file_id(cls, project_id: int, case_file_id: int):
175175
"""Return the number of complaint based on the project and case file id."""
176176
result = (
177177
cls.query.with_entities(

compliance-api/src/compliance_api/models/inspection/inspection.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ class Inspection(BaseModelVersioned):
151151
)
152152

153153
@classmethod
154-
def get_count_by_project_nd_case_file_id(cls, project_id: int, case_file_id: int):
154+
def get_count_by_project_and_case_file_id(cls, project_id: int, case_file_id: int):
155155
"""Return the number of inspection based on the project and case file id."""
156156
result = (
157157
cls.query.join(CaseFileModel, Inspection.case_file_id == CaseFileModel.id)

compliance-api/src/compliance_api/models/order.py

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from sqlalchemy import Boolean, Column, DateTime, Enum, ForeignKey, Index, Integer, String, func
66
from sqlalchemy.orm import relationship
77

8+
from compliance_api.models.inspection import InspectionRequirement
89
from compliance_api.utils.constant import DELETE_DIC_PARAMS
910
from compliance_api.utils.util import get_sorted_numbers_from_generated_code
1011

@@ -77,6 +78,29 @@ def get_by_requirement_id(cls, requirement_id):
7778
inspection_requirement_id=requirement_id, is_deleted=False, is_active=True
7879
).first()
7980

81+
@classmethod
82+
def get_by_inspection_and_order_id(
83+
cls, inspection_id: int, order_id: int
84+
):
85+
"""Get inspection requirement maps by inspection id and order id."""
86+
return (
87+
cls.query.join(
88+
InspectionRequirement,
89+
InspectionRequirement.id == cls.inspection_requirement_id
90+
)
91+
.join(
92+
InspectionModel,
93+
InspectionModel.id == InspectionRequirement.inspection_id
94+
)
95+
.filter(
96+
InspectionModel.id == inspection_id,
97+
cls.order_id == order_id,
98+
cls.is_deleted.is_(False),
99+
cls.is_active.is_(True),
100+
)
101+
.all()
102+
)
103+
80104
@classmethod
81105
@with_session
82106
def bulk_delete(
@@ -226,7 +250,7 @@ def update_order(cls, order_id, order_data, session=None):
226250
return order
227251

228252
@classmethod
229-
def get_count_by_project_nd_case_file_id(cls, project_id: int, case_file_id: int):
253+
def get_count_by_project_and_case_file_id(cls, project_id: int, case_file_id: int):
230254
"""Get count of orders by project and case file id."""
231255
result = (
232256
cls.query.join(InspectionModel, InspectionModel.id == cls.inspection_id)
@@ -282,10 +306,28 @@ def get_orders_by_case_files(cls, case_file_ids: list[int]):
282306

283307
@classmethod
284308
def get_by_inspection_id(cls, inspection_id):
285-
"""Find all orders by inspection id."""
286-
return cls.query.filter_by(
287-
inspection_id=inspection_id, is_deleted=False, is_active=True
288-
).all()
309+
"""Find all orders by inspection id that have entries in the requirement map for the given inspection."""
310+
return (
311+
cls.query.join(
312+
OrderInspectionRequirementMap,
313+
OrderInspectionRequirementMap.order_id
314+
== cls.id,
315+
)
316+
.join(
317+
InspectionRequirement,
318+
InspectionRequirement.id
319+
== OrderInspectionRequirementMap.inspection_requirement_id,
320+
)
321+
.filter(
322+
InspectionRequirement.inspection_id == inspection_id,
323+
OrderInspectionRequirementMap.is_active.is_(True),
324+
OrderInspectionRequirementMap.is_deleted.is_(False),
325+
cls.is_deleted.is_(False),
326+
)
327+
.distinct()
328+
.order_by(cls.created_date.desc())
329+
.all()
330+
)
289331

290332
@classmethod
291333
def has_replacement_order(cls, original_order_id: int):

compliance-api/src/compliance_api/models/restorative_justice.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ def get_by_restorative_justice_number(
286286

287287
@classmethod
288288
@with_session
289-
def get_count_by_project_nd_case_file_id(
289+
def get_count_by_project_and_case_file_id(
290290
cls, project_id: int, case_file_id: int, session=None
291291
):
292292
"""Get count of restorative justices by project and case file id."""

compliance-api/src/compliance_api/models/warning_letter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ def get_by_warning_letter_number(cls, warning_letter_number):
227227
).first()
228228

229229
@classmethod
230-
def get_count_by_project_nd_case_file_id(cls, project_id: int, case_file_id: int):
230+
def get_count_by_project_and_case_file_id(cls, project_id: int, case_file_id: int):
231231
"""Get count of warning letters by project and case file id."""
232232
result = (
233233
cls.query.join(InspectionModel, InspectionModel.id == cls.inspection_id)

compliance-api/src/compliance_api/resources/order.py

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
from compliance_api.services.order.order_approval import OrderApprovalService
1313

1414
from ..schemas import (
15-
CreateOrderApprovalSchema, OrderApprovalSchema, OrderCreateSchema, OrderIssueSchema, OrderReplaceSchema,
16-
OrderSchema, OrderStatusSchema, OrderUpdateSchema, RenderRequestSchema, ResetOrderFieldSchema,
17-
UpdateOrderApprovalStatusSchema)
15+
CreateOrderApprovalSchema, OrderApprovalSchema, OrderCreateSchema, OrderIssueSchema, OrderLinkCreateSchema,
16+
OrderLinksResponseSchema, OrderReplaceSchema, OrderSchema, OrderStatusSchema, OrderUpdateSchema,
17+
RenderRequestSchema, ResetOrderFieldSchema, UpdateOrderApprovalStatusSchema)
1818
from ..utils.util import cors_preflight
1919
from .apihelper import Api as ApiHelper
2020

@@ -58,6 +58,14 @@
5858
API, OrderReplaceSchema(), "OrderReplace"
5959
)
6060

61+
order_links_create_model = ApiHelper.convert_ma_schema_to_restx_model(
62+
API, OrderLinkCreateSchema(), "OrderLinkCreate"
63+
)
64+
65+
order_links_response_model = ApiHelper.convert_ma_schema_to_restx_model(
66+
API, OrderLinksResponseSchema(), "OrderLinksResponse"
67+
)
68+
6169

6270
@cors_preflight("GET, OPTIONS, POST")
6371
@API.route("", methods=["POST", "GET", "OPTIONS"])
@@ -355,3 +363,36 @@ def patch(order_id, approval_id):
355363
order_id, approval_id, approval_update_data
356364
)
357365
return OrderApprovalSchema().dump(updated_approval), HTTPStatus.OK
366+
367+
368+
@cors_preflight("POST, OPTIONS")
369+
@API.route("/links", methods=["POST", "OPTIONS"])
370+
class OrderLinks(Resource):
371+
"""Link inspection orders."""
372+
373+
@staticmethod
374+
@auth.require
375+
@API.expect(order_links_create_model)
376+
@API.response(400, "Bad Request")
377+
@API.response(404, "Not Found")
378+
@API.response(
379+
code=201,
380+
model=order_list_model,
381+
description="Success",
382+
)
383+
@ApiHelper.swagger_decorators(
384+
API,
385+
endpoint_description="Link inspection orders",
386+
)
387+
def post():
388+
"""Link this Order to inspection requirements."""
389+
link = OrderLinkCreateSchema().load(API.payload)
390+
order_id = link.get("order_id")
391+
created_link = OrderService.link(
392+
order_id,
393+
link
394+
)
395+
return (
396+
OrderLinksResponseSchema().dump(created_link),
397+
HTTPStatus.CREATED,
398+
)

compliance-api/src/compliance_api/schemas/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@
4949
from .inspection_requirement_grid import InspectionRequirementFilterSchema, InspectionRequirementGridItemSchema
5050
from .ir_download_request import CreateIRDownloadRequestSchema, IRDownloadRequestQuerySchema, IRDownloadRequestSchema
5151
from .order import (
52-
OrderCreateSchema, OrderIssueSchema, OrderReplaceSchema, OrderSchema, OrderStatusSchema, OrderUpdateSchema,
53-
ResetOrderFieldSchema)
52+
OrderCreateSchema, OrderIssueSchema, OrderLinkCreateSchema, OrderLinksResponseSchema, OrderReplaceSchema,
53+
OrderSchema, OrderStatusSchema, OrderUpdateSchema, ResetOrderFieldSchema)
5454
from .order_approval import CreateOrderApprovalSchema, OrderApprovalSchema, UpdateOrderApprovalStatusSchema
5555
from .paginate import PaginationParameterSchema
5656
from .project import ProjectSchema

compliance-api/src/compliance_api/schemas/inspection_requirement.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ class InspectionReqDetailDocImageUpdateSchema(InspectionReqDetailDocImageCreateS
132132

133133

134134
class InspectionReqDetailDocCreateSchema(BaseSchema):
135-
"""InpsectionReqDetailDocCreateSchema."""
135+
"""InspectionReqDetailDocCreateSchema."""
136136

137137
document_type_id = fields.Int(
138138
metadata={"description": "The unique identifier of the document type"},

0 commit comments

Comments
 (0)