Skip to content

Commit f9bb288

Browse files
authored
bug fixes (#611)
1 parent a80145f commit f9bb288

File tree

13 files changed

+78
-65
lines changed

13 files changed

+78
-65
lines changed

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

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111
from compliance_api.exceptions import ResourceNotFoundError
1212
from compliance_api.schemas import (
1313
CreateInspectionRecordApprovalSchema, CreateIRDownloadRequestSchema, InspectionRecordApprovalSchema,
14-
InspectionRecordCreateSchema, InspectionRecordSchema, IRDownloadRequestSchema, ResetInspectionRecordFieldSchema,
15-
UpdateInspectionRecordApprovalSchema, UpdateInspectionRecordApprovalStatusSchema, UpdateInspectionRecordSchema)
14+
InspectionRecordCreateSchema, InspectionRecordSchema, IRDownloadRequestSchema, RenderRequestSchema,
15+
ResetInspectionRecordFieldSchema, UpdateInspectionRecordApprovalSchema, UpdateInspectionRecordApprovalStatusSchema,
16+
UpdateInspectionRecordSchema)
1617
from compliance_api.services import InspectionRecordApprovalService, InspectionRecordService
1718
from compliance_api.utils.util import cors_preflight
1819

@@ -51,6 +52,9 @@
5152
ir_download_request_create_schema = ApiHelper.convert_ma_schema_to_restx_model(
5253
API, CreateIRDownloadRequestSchema(), "CreateIRDownloadRequest"
5354
)
55+
ir_render_request_model = ApiHelper.convert_ma_schema_to_restx_model(
56+
API, RenderRequestSchema(), "IRRenderRequest"
57+
)
5458

5559

5660
@cors_preflight("GET, OPTIONS, POST, PATCH")
@@ -285,23 +289,14 @@ class InspectionRecordPreview(Resource):
285289
@staticmethod
286290
@API.response(code=200, description="Success")
287291
@ApiHelper.swagger_decorators(API, endpoint_description="Preview inspection record")
288-
@API.doc(
289-
params={
290-
"output_format": {
291-
"description": "The output format of the inspection record",
292-
"type": "string",
293-
"required": False,
294-
"default": "html",
295-
"enum": ["html", "pdf"],
296-
}
297-
}
298-
)
292+
@API.expect(ir_render_request_model)
299293
@auth.require
300294
def post(
301295
inspection_id, inspection_record_id
302296
): # pylint: disable=no-self-use, unused-argument
303297
"""Preview inspection record."""
304-
output_format = request.json.get("output_format", "html")
298+
render_request = RenderRequestSchema().load(API.payload or {})
299+
output_format = render_request.get("output_format", "html")
305300
response, inspection = InspectionRecordService.render(
306301
inspection_id, inspection_record_id, output_format
307302
)

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

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@
77
from flask_restx import Namespace, Resource
88

99
from compliance_api.auth import auth
10-
from compliance_api.exceptions import BadRequestError, ResourceNotFoundError
10+
from compliance_api.exceptions import ResourceNotFoundError
1111
from compliance_api.services.order.order import OrderService
1212
from compliance_api.services.order.order_approval import OrderApprovalService
1313

1414
from ..schemas import (
1515
CreateOrderApprovalSchema, OrderApprovalSchema, OrderCreateSchema, OrderIssueSchema, OrderReplaceSchema,
16-
OrderSchema, OrderStatusSchema, OrderUpdateSchema, ResetOrderFieldSchema, UpdateOrderApprovalStatusSchema)
16+
OrderSchema, OrderStatusSchema, OrderUpdateSchema, RenderRequestSchema, ResetOrderFieldSchema,
17+
UpdateOrderApprovalStatusSchema)
1718
from ..utils.util import cors_preflight
1819
from .apihelper import Api as ApiHelper
1920

@@ -49,6 +50,9 @@
4950
reset_order_field_model = ApiHelper.convert_ma_schema_to_restx_model(
5051
API, ResetOrderFieldSchema(), "ResetOrderField"
5152
)
53+
order_render_request_model = ApiHelper.convert_ma_schema_to_restx_model(
54+
API, RenderRequestSchema(), "OrderRenderRequest"
55+
)
5256

5357
order_replace_model = ApiHelper.convert_ma_schema_to_restx_model(
5458
API, OrderReplaceSchema(), "OrderReplace"
@@ -250,23 +254,12 @@ class OrderPreview(Resource):
250254
@API.response(code=200, description="Success")
251255
@API.response(404, "Not Found")
252256
@ApiHelper.swagger_decorators(API, endpoint_description="Preview order")
253-
@API.doc(
254-
params={
255-
"output_format": {
256-
"description": "The output format of the order report",
257-
"type": "string",
258-
"required": False,
259-
"default": "html",
260-
"enum": ["html", "pdf"],
261-
}
262-
}
263-
)
257+
@API.expect(order_render_request_model)
264258
@auth.require
265259
def post(order_id): # pylint: disable=no-self-use, unused-argument
266260
"""Preview order."""
267-
output_format = request.args.get("output_format", "html")
268-
if output_format not in ["html", "pdf"]:
269-
raise BadRequestError("Invalid output format")
261+
render_request = RenderRequestSchema().load(API.payload or {})
262+
output_format = render_request.get("output_format", "html")
270263
response, order = OrderService.render(order_id, output_format)
271264
if output_format == "pdf":
272265
return send_file(

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

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
from compliance_api.auth import auth
1010
from compliance_api.exceptions import ResourceNotFoundError
11+
from compliance_api.schemas import RenderRequestSchema
1112
from compliance_api.schemas.warning_letter import (
1213
ResetWarningLetterFieldSchema, WarningLetterCreateSchema, WarningLetterIssueSchema, WarningLetterSchema,
1314
WarningLetterStatusSchema, WarningLetterUpdateSchema)
@@ -41,6 +42,9 @@
4142
reset_warning_letter_field_model = ApiHelper.convert_ma_schema_to_restx_model(
4243
API, ResetWarningLetterFieldSchema(), "ResetWarningLetterField"
4344
)
45+
warning_letter_render_request_model = ApiHelper.convert_ma_schema_to_restx_model(
46+
API, RenderRequestSchema(), "WarningLetterRenderRequest"
47+
)
4448
warning_letter_approval_model = ApiHelper.convert_ma_schema_to_restx_model(
4549
API, WarningLetterApprovalSchema(), "WarningLetterApproval"
4650
)
@@ -232,21 +236,12 @@ class WarningLetterPreview(Resource):
232236
@API.response(code=200, description="Success")
233237
@API.response(404, "Not Found")
234238
@ApiHelper.swagger_decorators(API, endpoint_description="Preview warning letter")
235-
@API.doc(
236-
params={
237-
"output_format": {
238-
"description": "The output format of the warning letter report",
239-
"type": "string",
240-
"required": False,
241-
"default": "html",
242-
"enum": ["html", "pdf"],
243-
}
244-
}
245-
)
239+
@API.expect(warning_letter_render_request_model)
246240
@auth.require
247241
def post(warning_letter_id): # pylint: disable=no-self-use, unused-argument
248242
"""Preview warning letter."""
249-
output_format = request.json.get("output_format", "html")
243+
render_request = RenderRequestSchema().load(API.payload or {})
244+
output_format = render_request.get("output_format", "html")
250245
response, warning_letter = WarningLetterService.render(
251246
warning_letter_id, output_format
252247
)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
CaseFileUpdateSchema, EnforcementItemSchema)
2424
from .charge_recommendation import (
2525
ChargeRecommendationCreateSchema, ChargeRecommendationSchema, ChargeRecommendationUpdateSchema)
26-
from .common import KeyValueSchema
26+
from .common import KeyValueSchema, RenderRequestSchema
2727
from .complaint import (
2828
ComplaintCreateSchema, ComplaintFilterSchema, ComplaintSchema, ComplaintSourceContactSchema, ComplaintStatusSchema,
2929
ComplaintUpdateSchema, RequirementSourceDetailSchema)

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,25 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414
"""Common Schema."""
15-
from marshmallow import Schema, fields
15+
from marshmallow import Schema, fields, validate
16+
17+
from .base_schema import BaseSchema
1618

1719

1820
class KeyValueSchema(Schema):
1921
"""Schema to represent key/value."""
2022

2123
id = fields.Str(metadata={"description": "Unique id in the list"})
2224
name = fields.Str(metadata={"description": "Name of the list item"})
25+
26+
27+
class RenderRequestSchema(BaseSchema):
28+
"""Schema for document render request."""
29+
30+
output_format = fields.Str(
31+
required=False,
32+
missing="html",
33+
default="html",
34+
validate=validate.OneOf(["html", "pdf"]),
35+
metadata={"description": "The output format of the document"}
36+
)

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""Schema for IR Download Request."""
22

33
from marshmallow import EXCLUDE, fields, post_dump
4+
45
from compliance_api.models.ir_download_request import IRDownloadRequest as IRDownloadRequestModel
56
from compliance_api.utils.constant import INPUT_DATE_TIME_FORMAT
67

compliance-api/src/compliance_api/services/case_file.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -922,7 +922,7 @@ def _build_enforcement_query(inspection_ids: list):
922922
and_(
923923
OrderModel.inspection_id == InspectionModel.id,
924924
OrderModel.order_status.notin_(
925-
[OrderStatusEnum.OPEN, OrderStatusEnum.CLOSED]
925+
[OrderStatusEnum.OPEN, OrderStatusEnum.CLOSED, OrderStatusEnum.RESCINDED]
926926
),
927927
OrderModel.is_active.is_(True),
928928
OrderModel.is_deleted.is_(False),

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from compliance_api.models import IRStatusOption as IRStatusOptionModel
2828
from compliance_api.models import Order as OrderModel
2929
from compliance_api.models import OrderInspectionRequirementMap as OrderInspectionRequirementMapModel
30-
from compliance_api.models import OrderProgressEnum
30+
from compliance_api.models import OrderProgressEnum, OrderReplaceStatusEnum
3131
from compliance_api.models import ViolationTicket as ViolationTicketModel
3232
from compliance_api.models import WarningLetter as WarningLetterModel
3333
from compliance_api.models import db
@@ -572,7 +572,7 @@ def _set_order_enforcement_action_object(
572572
in [
573573
req_map.inspection_requirement_id
574574
for req_map in order.order_requirement_maps
575-
]
575+
] and order.order_replace_status == OrderReplaceStatusEnum.ORIGINAL
576576
]
577577
if requirement_orders:
578578
order = requirement_orders[0]

compliance-api/src/compliance_api/services/inspection_record/inspection_record_builder.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,11 @@ def build_officer_details(self):
115115
if self.existing_ir
116116
else self.inspection.primary_officer
117117
)
118+
record_prepared_by_position = (
119+
self.existing_ir.record_prepared_by_position
120+
if self.existing_ir
121+
else self.inspection.primary_officer.position
122+
)
118123
self.data["officer_details"] = {
119124
"primary_officer": {
120125
"name": f"{self.inspection.primary_officer.first_name} {self.inspection.primary_officer.last_name}",
@@ -123,7 +128,7 @@ def build_officer_details(self):
123128
"record_prepared_by": {
124129
"name": f"{record_prepared_by.first_name} "
125130
f"{record_prepared_by.last_name}",
126-
"position": record_prepared_by.position.name,
131+
"position": record_prepared_by_position.name,
127132
},
128133
}
129134

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
from compliance_api.models.inspection_record import InspectionRecord as InspectionRecordModel
4343
from compliance_api.models.order import Order as OrderModel
4444
from compliance_api.models.order import OrderInspectionRequirementMap as OrderInspectionRequirementMapModel
45-
from compliance_api.models.order import OrderProgressEnum, OrderStatusEnum
45+
from compliance_api.models.order import OrderProgressEnum, OrderReplaceStatusEnum, OrderStatusEnum
4646
from compliance_api.models.order_approval import OrderApproval as OrderApprovalModel
4747
from compliance_api.models.order_approval import OrderApprovalStatusEnum
4848
from compliance_api.models.requirement_source import RequirementSource as RequirementSourceOptionModel
@@ -481,6 +481,7 @@ def _get_requirement_order_sub_query():
481481
OrderInspectionRequirementMapModel.is_deleted.is_(False),
482482
OrderModel.is_active.is_(True),
483483
OrderModel.is_deleted.is_(False),
484+
OrderModel.order_replace_status == OrderReplaceStatusEnum.ORIGINAL,
484485
)
485486
.subquery("requirement_order")
486487
)

0 commit comments

Comments
 (0)