diff --git a/compliance-api/migrations/versions/f71662d8e6c6_adding_project_components_and_area_.py b/compliance-api/migrations/versions/f71662d8e6c6_adding_project_components_and_area_.py new file mode 100644 index 00000000..802241d7 --- /dev/null +++ b/compliance-api/migrations/versions/f71662d8e6c6_adding_project_components_and_area_.py @@ -0,0 +1,28 @@ +"""adding project components and area inspected to inspecton model + +Revision ID: f71662d8e6c6 +Revises: 36db02e529a3 +Create Date: 2026-02-19 14:04:12.318696 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'f71662d8e6c6' +down_revision = '36db02e529a3' +branch_labels = None +depends_on = None + + +def upgrade(): + op.add_column('inspections', sa.Column('area_inspected', sa.String(), nullable=True)) + op.add_column('inspections_version', sa.Column('area_inspected', sa.String(), nullable=True)) + op.add_column('inspections_version', sa.Column('area_inspected_mod', sa.Boolean(), nullable=True)) + + +def downgrade(): + op.drop_column('inspections', 'area_inspected') + op.drop_column('inspections_version', 'area_inspected') + op.drop_column('inspections_version', 'area_inspected_mod') diff --git a/compliance-api/src/compliance_api/models/inspection/inspection.py b/compliance-api/src/compliance_api/models/inspection/inspection.py index 717b68d3..9d07804e 100644 --- a/compliance-api/src/compliance_api/models/inspection/inspection.py +++ b/compliance-api/src/compliance_api/models/inspection/inspection.py @@ -99,6 +99,7 @@ class Inspection(BaseModelVersioned): Integer, nullable=True, ) + area_inspected = Column(String, nullable=True, comment="A brief description of Project Components / Area Inspected") initiation = relationship( "InspectionInitiationOption", foreign_keys=[initiation_id], lazy="joined" diff --git a/compliance-api/src/compliance_api/schemas/inspection.py b/compliance-api/src/compliance_api/schemas/inspection.py index 9b09fe2b..9f8f4d4c 100644 --- a/compliance-api/src/compliance_api/schemas/inspection.py +++ b/compliance-api/src/compliance_api/schemas/inspection.py @@ -159,6 +159,10 @@ class InspectionUpdateSchema(BaseSchema): # pylint: disable=too-many-ancestors ), required=False, ) + area_inspected = fields.Str( + metadata={"description": "A brief description of Project Components / Area Inspected"}, + allow_none=True, + ) @pre_load def end_date_populate( diff --git a/compliance-api/src/compliance_api/services/inspection.py b/compliance-api/src/compliance_api/services/inspection.py index cc20b81b..081f0b02 100644 --- a/compliance-api/src/compliance_api/services/inspection.py +++ b/compliance-api/src/compliance_api/services/inspection.py @@ -935,6 +935,7 @@ def _create_inspection_update_obj(inspection_data: dict): "initiation_id": inspection_data.get("initiation_id"), "debrief_date": inspection_data.get("debrief_date", None), "project_status_id": inspection_data.get("project_status_id", None), + "area_inspected": inspection_data.get("area_inspected", None), } diff --git a/compliance-api/src/compliance_api/services/inspection_record/inspection_record_builder.py b/compliance-api/src/compliance_api/services/inspection_record/inspection_record_builder.py index e8b32fa8..b18263c7 100644 --- a/compliance-api/src/compliance_api/services/inspection_record/inspection_record_builder.py +++ b/compliance-api/src/compliance_api/services/inspection_record/inspection_record_builder.py @@ -276,11 +276,13 @@ def build_inspection_scope(self): self.data["inspection_scope"] = self.existing_ir.inspection_scope return self debreif_date = self.inspection.debrief_date + area_inspected = self.inspection.area_inspected inspection_scope_data = { "debrief_date": ( convert_to_full_month_format(debreif_date) if debreif_date else None ), # handling of the null case "requirements": [], + "area_inspected": area_inspected if area_inspected else None, } requirements = InspectionRequirementModel.get_by_inspection_id( self.inspection.id diff --git a/compliance-api/src/compliance_api/services/inspection_record/ir_template_constant.py b/compliance-api/src/compliance_api/services/inspection_record/ir_template_constant.py index c085c40f..0912d245 100644 --- a/compliance-api/src/compliance_api/services/inspection_record/ir_template_constant.py +++ b/compliance-api/src/compliance_api/services/inspection_record/ir_template_constant.py @@ -1,7 +1,7 @@ """IR template related constants.""" INSPECTION_SCOPE = """

- The Officer inspected [Brief description of Project Components / Area inspected] + The Officer inspected {{ area_inspected }}.

The inspection included a debrief of observations with Project staff on {{ debrief_date }}. diff --git a/compliance-web/cypress/components/_components/_App/_Inspections/InspectionFormUtils.cy.ts b/compliance-web/cypress/components/_components/_App/_Inspections/InspectionFormUtils.cy.ts index d121b07a..7ccffb8f 100644 --- a/compliance-web/cypress/components/_components/_App/_Inspections/InspectionFormUtils.cy.ts +++ b/compliance-web/cypress/components/_components/_App/_Inspections/InspectionFormUtils.cy.ts @@ -77,6 +77,7 @@ describe("InspectionFormUtils", () => { other: "Other Info", firstNations: [{ id: 1, name: "First Nation 1" }], agencies: [{ id: 1, name: "Agency 1" }], + areaInspected: "Area A", }; const expectedFormattedData = { @@ -94,6 +95,7 @@ describe("InspectionFormUtils", () => { attendance_option_ids: [1, AttendanceEnum.OFFICERS], attending_officer_ids: [2], is_history: false, + area_inspected: "Area A", }; const formattedData = formatInspectionAPIData(formData, 123); diff --git a/compliance-web/src/components/App/Inspections/InspectionDrawer.tsx b/compliance-web/src/components/App/Inspections/InspectionDrawer.tsx index 0487d619..942cd625 100644 --- a/compliance-web/src/components/App/Inspections/InspectionDrawer.tsx +++ b/compliance-web/src/components/App/Inspections/InspectionDrawer.tsx @@ -62,7 +62,8 @@ const initFormData: InspectionFormData = { projectDescription: "", locationDescription: "", utm: "", - debriefDate: undefined, + debriefDate: undefined, + areaInspected: "", }; const InspectionDrawer: React.FC = ({ @@ -147,6 +148,7 @@ const InspectionDrawer: React.FC = ({ projectDescription: inspection.project_description ?? "", locationDescription: inspection.location_description ?? "", utm: inspection.utm ?? "", + areaInspected: inspection.area_inspected ?? "", }; } const selectedOfficer = staffUserList.find( @@ -157,6 +159,7 @@ const InspectionDrawer: React.FC = ({ caseFileId: caseFile.id?.toString(), primaryOfficer: selectedOfficer, projectDescription: caseFile.project_description ?? "", + areaInspected: "", }; }, [inspection, caseFile, staffUserList, currentUser?.preferred_username]); diff --git a/compliance-web/src/components/App/Inspections/InspectionFormLeft.tsx b/compliance-web/src/components/App/Inspections/InspectionFormLeft.tsx index 693479cb..c10344fb 100644 --- a/compliance-web/src/components/App/Inspections/InspectionFormLeft.tsx +++ b/compliance-web/src/components/App/Inspections/InspectionFormLeft.tsx @@ -61,7 +61,7 @@ const InspectionFormLeft: FC = ({ = ({ placeholder="eg. 9U 454135 6399452" fullWidth /> + schema.notRequired(), }), + areaInspected: yup.string().nullable(), }); export type InspectionSchemaType = yup.InferType; @@ -139,6 +140,7 @@ export const formatInspectionAPIData = ( utm: formData.utm ?? "", project_status_id: (formData.projectStatus as ProjectStatus)?.id, attendance_option_ids: inAttendanceOptions, + area_inspected: formData.areaInspected ?? "", }; if (formData.officers?.length) { diff --git a/compliance-web/src/components/App/Inspections/Profile/InspectionGeneralInformation.tsx b/compliance-web/src/components/App/Inspections/Profile/InspectionGeneralInformation.tsx index 033d3473..b8ec2ee8 100644 --- a/compliance-web/src/components/App/Inspections/Profile/InspectionGeneralInformation.tsx +++ b/compliance-web/src/components/App/Inspections/Profile/InspectionGeneralInformation.tsx @@ -40,6 +40,7 @@ const InspectionGeneralInformation: React.FC< value: inspectionData.location_description, }, { name: "UTM", value: inspectionData.utm }, + { name: "Project Components / Area Inspected", value: inspectionData.area_inspected }, { name: "Primary", value: inspectionData.primary_officer?.name }, { name: "Initiation", value: inspectionData.initiation?.name }, { diff --git a/compliance-web/src/models/Inspection.ts b/compliance-web/src/models/Inspection.ts index 157e5259..856a81c8 100644 --- a/compliance-web/src/models/Inspection.ts +++ b/compliance-web/src/models/Inspection.ts @@ -49,6 +49,7 @@ export interface Inspection { enforcement?: string; ir_progress?: IRProgress; is_history?: boolean; + area_inspected?: string; } export interface InspectionGridQueryParams extends BaseTableQueryParams { @@ -131,6 +132,7 @@ export interface InspectionFormData { projectDescription?: string; locationDescription?: string; utm?: string; + areaInspected?: string; } export interface InspectionAPIData { @@ -158,6 +160,7 @@ export interface InspectionAPIData { unapproved_project_type?: string; unapproved_project_sub_type?: string; is_history?: boolean; + area_inspected?: string; } export interface InspectionStatusAPIData {