@php use App\Support\MecReportType; $schemeProject = $reportWizardProject ?? null; $schemeIdentityReadonly = $schemeProject !== null; $pA1 = $reportPayload ?? report_wizard_payload_array(is_array($report ?? null) ? $report : null); $isPmrA1 = MecReportType::isPmr((string) ($reportType ?? '')); $a1AdpLabel = $isPmrA1 ? 'ADP / PSDP No.' : 'ADP No.'; $a1NameLabel = $isPmrA1 ? 'Name / Title' : 'Name of the Scheme / QRC'; $a1SdgLabel = $isPmrA1 ? 'Target SDGs' : 'Relevant SDGs'; $a1LocationSectionLabel = $isPmrA1 ? 'Component/Unit Location' : null; $a1DistrictLabel = $isPmrA1 ? 'Districts:' : 'District'; $a1AdminLabel = $isPmrA1 ? 'Administrative Department' : 'Administrative Department'; $a1EaLabel = $isPmrA1 ? 'Executing Agency/PMU-PIU' : 'Executing Agency'; $a1ConsultantLabel = $isPmrA1 ? 'Consultants / Design Engineer(s)' : 'Consultant / Design Engineer'; $a1ContractorLabel = $isPmrA1 ? 'Contractor (s) / Supplier (s)' : 'Contractor (s)'; $a1PcIOriginalDateLabel = $isPmrA1 ? 'Original PC-I Approval Date' : 'Date of completion'; $a1PcICompletionDateLabel = $isPmrA1 ? 'Completion Date' : null; $a1ObjectivesLabel = $isPmrA1 ? 'PD Objectives/ Targets (PC-I)' : 'Scheme Objectives (as per PC-I)'; $schemeAdpDisplay = report_wizard_old('part_a.scheme_unit.adp_no', (string) ($reportStoredAdpNumber ?? ''), $pA1); $fundingAgenciesDisplay = report_wizard_old('part_a.scheme_unit.funding_agencies', '', $pA1); $schemeUidDisplay = report_wizard_old('part_a.scheme_unit.uid_no', $schemeIdentityReadonly ? (string) ($schemeProject->code ?? '') : '', $pA1); $adminDeptDisplay = report_wizard_old('part_a.scheme_unit.administrative_department', $schemeIdentityReadonly ? (string) ($schemeProject->department?->name ?? '') : '', $pA1); $pcIRevisionStatusPrefill = $reportPcIRevisionStatusPrefill ?? ''; $pcIRevisionStatusDisplay = report_wizard_old('part_a.scheme_unit.pc_i_revision_status', $pcIRevisionStatusPrefill, $pA1); $pcIRevisionStatusOptions = \App\Support\ReportPcIRevisionStatus::options(); $pcIRevisionStatusSelected = in_array($pcIRevisionStatusDisplay, $pcIRevisionStatusOptions, true) ? $pcIRevisionStatusDisplay : ''; $pcIRevisionDatePrefill = $reportSchemeCompletionDatePrefill ?? ''; $pcIRevisionDateDisplay = trim((string) report_wizard_old('part_a.scheme_unit.pc_i_revision_date', $pcIRevisionDatePrefill, $pA1)); if ($pcIRevisionDateDisplay === '' && $pcIRevisionDatePrefill !== '') { $pcIRevisionDateDisplay = $pcIRevisionDatePrefill; } if ($schemeIdentityReadonly && $pcIRevisionDatePrefill !== '') { $pcIRevisionDateDisplay = $pcIRevisionDatePrefill; } $aaIssuedDatePrefillForA1 = $reportAaIssuedDatePrefill ?? ''; $pcIOriginalApprovalDisplay = trim((string) report_wizard_old('part_a.scheme_unit.pc_i_original_approval_date', $aaIssuedDatePrefillForA1, $pA1)); if ($pcIOriginalApprovalDisplay === '' && $aaIssuedDatePrefillForA1 !== '') { $pcIOriginalApprovalDisplay = $aaIssuedDatePrefillForA1; } $pcICompletionDateDisplay = trim((string) report_wizard_old( 'part_a.scheme_unit.pc_i_completion_date', $pcIRevisionDateDisplay !== '' ? $pcIRevisionDateDisplay : $pcIRevisionDatePrefill, $pA1 )); if ($pcICompletionDateDisplay === '' && $pcIRevisionDatePrefill !== '') { $pcICompletionDateDisplay = $pcIRevisionDatePrefill; } if ($schemeIdentityReadonly && $pcIRevisionDatePrefill !== '') { $pcICompletionDateDisplay = $pcIRevisionDatePrefill; } $schemeObjectivesPrefill = $reportSchemeObjectivesPcIPrefill ?? ''; $schemeObjectivesDisplay = report_wizard_old('part_a.scheme_unit.scheme_objectives_pc_i', $schemeObjectivesPrefill, $pA1); $schemeScopePrefill = $reportSchemeScopePcIPrefill ?? ''; $schemeScopeDisplay = report_wizard_old('part_a.scheme_unit.scheme_scope_pc_i', $schemeScopePrefill, $pA1); $reportSdgGoalsList = collect($reportSdgGoals ?? [])->sortBy('id')->values(); $sdgNaOptionValue = 'na'; $savedSdgRaw = old('report.part_a.scheme_unit.sdg_goal_ids', data_get($pA1, 'part_a.scheme_unit.sdg_goal_ids', [])); if (! is_array($savedSdgRaw)) { $savedSdgRaw = $savedSdgRaw === null || $savedSdgRaw === '' ? [] : [$savedSdgRaw]; } $sdgNotApplicableSelected = collect($savedSdgRaw)->contains( static fn ($id) => is_string($id) && strcasecmp(trim($id), $sdgNaOptionValue) === 0 ); $savedSdgIds = $sdgNotApplicableSelected ? [] : array_values(array_unique(array_map('intval', array_filter($savedSdgRaw, static fn ($id) => is_numeric($id) && (int) $id > 0)))); $pcISdgGoalIds = array_values(array_unique(array_map('intval', $reportSdgGoalIdsPrefill ?? []))); // Lock to PC-I only when that PC-I already has SDGs; otherwise keep editable so the field can be required. $sdgGoalsEditable = count($pcISdgGoalIds) === 0; $selectedSdgGoalIds = $sdgGoalsEditable ? (count($savedSdgIds) > 0 ? $savedSdgIds : []) : $pcISdgGoalIds; if (! $sdgGoalsEditable) { $sdgNotApplicableSelected = false; } $executingAgencySuggestions = $reportExecutingAgencySuggestions ?? []; $executingAgencyPrefillRows = $reportExecutingAgencyPrefillRows ?? []; $executingAgencyRowValues = report_wizard_rows('part_a.scheme_unit.executing_agencies', [''], $pA1); if ($executingAgencyRowValues === [''] && count($executingAgencyPrefillRows) > 0 && data_get($pA1, 'part_a.scheme_unit.executing_agencies') === null) { $executingAgencyRowValues = $executingAgencyPrefillRows; } $legacyEa = report_wizard_old('part_a.scheme_unit.executing_agency', null, $pA1); if ($legacyEa !== null && $legacyEa !== '' && ! is_array($legacyEa) && $executingAgencyRowValues === ['']) { $executingAgencyRowValues = [(string) $legacyEa]; } $a1EaCatalog = array_values(array_unique(array_filter( array_map(static fn ($s) => trim((string) $s), is_array($executingAgencySuggestions) ? $executingAgencySuggestions : []), static fn ($s) => $s !== '' ))); natcasesort($a1EaCatalog); $a1EaCatalog = array_values($a1EaCatalog); $a1EaOptionsForRow = static function (int $rowIndex, array $allRows, array $catalog): array { $taken = []; foreach ($allRows as $j => $val) { if ((int) $j === $rowIndex) { continue; } $t = trim((string) $val); if ($t !== '') { $taken[strtolower($t)] = true; } } $current = trim((string) ($allRows[$rowIndex] ?? '')); $options = []; foreach ($catalog as $label) { $key = strtolower($label); if (isset($taken[$key]) && strtolower($current) !== $key) { continue; } $options[] = $label; } if ($current !== '') { $has = false; foreach ($options as $opt) { if (strcasecmp($opt, $current) === 0) { $has = true; break; } } if (! $has) { $options[] = $current; } } return $options; }; $visitUcTownOptions = $reportVisitUcTownOptions ?? []; $visitUcTownRowValues = report_wizard_rows('part_a.scheme_unit.visit_uc_towns', [''], $pA1); if ($visitUcTownRowValues === [''] && count($visitUcTownOptions) > 0 && data_get($pA1, 'part_a.scheme_unit.visit_uc_towns') === null) { $visitUcTownRowValues = $visitUcTownOptions; } $legacyUcTown = report_wizard_old('part_a.scheme_unit.visit_uc_town', null, $pA1); if ($legacyUcTown !== null && $legacyUcTown !== '' && $visitUcTownRowValues === ['']) { $visitUcTownRowValues = [(string) $legacyUcTown]; } $visitDistrictOptions = $reportVisitDistrictOptions ?? []; $visitDistrictRowValues = report_wizard_rows('part_a.scheme_unit.visit_districts', [''], $pA1); if ($visitDistrictRowValues === [''] && count($visitDistrictOptions) > 0 && data_get($pA1, 'part_a.scheme_unit.visit_districts') === null) { $visitDistrictRowValues = $visitDistrictOptions; } $legacyDistrict = report_wizard_old('part_a.scheme_unit.visit_district', null, $pA1); if ($legacyDistrict !== null && $legacyDistrict !== '' && $visitDistrictRowValues === ['']) { $visitDistrictRowValues = [(string) $legacyDistrict]; } $planSchemeVisitLocation = trim((string) ($reportWizardPlanScheme->visit_location ?? '')); if ($visitDistrictRowValues === [''] && $planSchemeVisitLocation !== '' && data_get($pA1, 'part_a.scheme_unit.visit_districts') === null) { $visitDistrictRowValues = [$planSchemeVisitLocation]; } $a1DistrictCatalog = array_values(array_unique(array_filter( array_map(static fn ($s) => trim((string) $s), is_array($reportVisitDistrictCatalog ?? null) ? $reportVisitDistrictCatalog : []), static fn ($s) => $s !== '' ))); natcasesort($a1DistrictCatalog); $a1DistrictCatalog = array_values($a1DistrictCatalog); $visitUcTownOptions = report_visit_location_labels_display($visitUcTownOptions); $visitDistrictOptions = report_visit_location_labels_display($visitDistrictOptions); $visitUcTownRowValues = array_map(static fn ($value) => report_visit_location_label_display($value), $visitUcTownRowValues); $visitDistrictRowValues = array_map(static fn ($value) => report_visit_location_label_display($value), $visitDistrictRowValues); $a1DistrictCatalog = report_visit_location_labels_display($a1DistrictCatalog); $a1DistrictOptionsForRow = static function (int $rowIndex, array $allRows, array $catalog): array { $current = trim((string) ($allRows[$rowIndex] ?? '')); $options = $catalog; if ($current !== '') { $has = false; foreach ($options as $opt) { if (strcasecmp($opt, $current) === 0) { $has = true; break; } } if (! $has) { $options[] = $current; } } return $options; }; $gpsPairsPrefill = $reportVisitGpsPairs ?? []; $oldGpsLat = report_wizard_old('part_a.scheme_unit.gps_lat_n', null, $pA1); $oldGpsLng = report_wizard_old('part_a.scheme_unit.gps_long_e', null, $pA1); if (is_array($oldGpsLat) || is_array($oldGpsLng)) { $latArr = is_array($oldGpsLat) ? array_values(array_map(static fn ($v) => (string) $v, $oldGpsLat)) : []; $lngArr = is_array($oldGpsLng) ? array_values(array_map(static fn ($v) => (string) $v, $oldGpsLng)) : []; $n = max(count($latArr), count($lngArr), 1); $gpsPairRows = []; for ($i = 0; $i < $n; $i++) { $gpsPairRows[] = ['lat' => (string) ($latArr[$i] ?? ''), 'lng' => (string) ($lngArr[$i] ?? '')]; } } elseif ( (! is_array($oldGpsLat) && $oldGpsLat !== null && $oldGpsLat !== '') || (! is_array($oldGpsLng) && $oldGpsLng !== null && $oldGpsLng !== '') ) { $gpsPairRows = [[ 'lat' => (string) (is_array($oldGpsLat) ? '' : ($oldGpsLat ?? '')), 'lng' => (string) (is_array($oldGpsLng) ? '' : ($oldGpsLng ?? '')), ]]; } elseif (count($gpsPairsPrefill) > 0) { $gpsPairRows = $gpsPairsPrefill; } else { $gpsPairRows = [['lat' => '', 'lng' => '']]; } $consultantCatalog = $reportConsultantNameOptions ?? []; $oldConsultantsMulti = report_wizard_old('part_a.scheme_unit.consultant_design_engineers', null, $pA1); if (is_array($oldConsultantsMulti)) { $consultantSelected = array_values(array_filter(array_map(static fn ($v) => trim((string) $v), $oldConsultantsMulti))); } else { $legacyConsultant = report_wizard_old('part_a.scheme_unit.consultant_design_engineer', null, $pA1); if (is_string($legacyConsultant) && trim($legacyConsultant) !== '') { $consultantSelected = array_values(array_filter(array_map('trim', explode(',', $legacyConsultant)))); } else { $consultantSelected = []; } } $consultantSelected = report_scheme_party_names_display($consultantSelected); $consultantOptions = report_scheme_party_names_display(array_merge( is_array($consultantCatalog) ? $consultantCatalog : [], $consultantSelected )); $consultantOptions = array_values(array_unique($consultantOptions)); natcasesort($consultantOptions); $consultantOptions = array_values($consultantOptions); $consultantSelectedLower = array_map(static fn ($s) => strtolower(trim((string) $s)), $consultantSelected); $contractorCatalog = $reportContractorNameOptions ?? []; $oldContractorsMulti = report_wizard_old('part_a.scheme_unit.contractors', null, $pA1); if (is_array($oldContractorsMulti)) { $contractorSelected = array_values(array_filter(array_map(static fn ($v) => trim((string) $v), $oldContractorsMulti))); } elseif (is_string($oldContractorsMulti) && trim($oldContractorsMulti) !== '') { $contractorSelected = array_values(array_filter(array_map('trim', explode(',', $oldContractorsMulti)))); } else { $contractorSelected = []; } $contractorSelected = report_scheme_party_names_display($contractorSelected); $contractorOptions = report_scheme_party_names_display(array_merge( is_array($contractorCatalog) ? $contractorCatalog : [], $contractorSelected )); $contractorOptions = array_values(array_unique($contractorOptions)); natcasesort($contractorOptions); $contractorOptions = array_values($contractorOptions); $contractorSelectedLower = array_map(static fn ($s) => strtolower(trim((string) $s)), $contractorSelected); $pA1Payload = is_array($pA1) ? $pA1 : []; $gpsReportingMode = report_wizard_old('part_a.scheme_unit.gps_reporting_mode', report_scheme_unit_field_reporting_mode($pA1Payload, 'gps'), $pA1); $consultantsReportingMode = report_wizard_old('part_a.scheme_unit.consultants_reporting_mode', report_scheme_unit_field_reporting_mode($pA1Payload, 'consultants'), $pA1); $contractorsReportingMode = report_wizard_old('part_a.scheme_unit.contractors_reporting_mode', report_scheme_unit_field_reporting_mode($pA1Payload, 'contractors'), $pA1); foreach (['gpsReportingMode', 'consultantsReportingMode', 'contractorsReportingMode'] as $modeVar) { if (! in_array((string) $$modeVar, ['single', 'unit_wise'], true)) { $$modeVar = 'single'; } } $gpsUnits = report_scheme_unit_gps_units_from_payload($pA1Payload); $oldGpsUnits = old('report.part_a.scheme_unit.gps_units'); if (is_array($oldGpsUnits) && $oldGpsUnits !== []) { $gpsUnits = $oldGpsUnits; } $consultantUnits = report_scheme_unit_party_units_from_payload($pA1Payload, 'consultants'); $oldConsultantUnits = old('report.part_a.scheme_unit.consultant_units'); if (is_array($oldConsultantUnits) && $oldConsultantUnits !== []) { $consultantUnits = $oldConsultantUnits; } $consultantUnits = array_map(static function ($unit) { if (! is_array($unit)) { return $unit; } $rows = is_array($unit['rows'] ?? null) ? $unit['rows'] : []; foreach ($rows as $rIdx => $row) { if (! is_array($row)) { continue; } $rows[$rIdx]['name'] = report_scheme_party_name_display($row['name'] ?? ''); } $unit['rows'] = $rows; return $unit; }, is_array($consultantUnits) ? $consultantUnits : []); $contractorUnits = report_scheme_unit_party_units_from_payload($pA1Payload, 'contractors'); $oldContractorUnits = old('report.part_a.scheme_unit.contractor_units'); if (is_array($oldContractorUnits) && $oldContractorUnits !== []) { $contractorUnits = $oldContractorUnits; } $contractorUnits = array_map(static function ($unit) { if (! is_array($unit)) { return $unit; } $rows = is_array($unit['rows'] ?? null) ? $unit['rows'] : []; foreach ($rows as $rIdx => $row) { if (! is_array($row)) { continue; } $rows[$rIdx]['name'] = report_scheme_party_name_display($row['name'] ?? ''); } $unit['rows'] = $rows; return $unit; }, is_array($contractorUnits) ? $contractorUnits : []); $gpsSingleLat = report_wizard_old('part_a.scheme_unit.gps_lat_n', $gpsPairRows[0]['lat'] ?? '', $pA1); $gpsSingleLng = report_wizard_old('part_a.scheme_unit.gps_long_e', $gpsPairRows[0]['lng'] ?? '', $pA1); if (is_array($gpsSingleLat)) { $gpsSingleLat = (string) ($gpsSingleLat[0] ?? ''); } if (is_array($gpsSingleLng)) { $gpsSingleLng = (string) ($gpsSingleLng[0] ?? ''); } $consultantSingle = report_wizard_old('part_a.scheme_unit.consultant_design_engineers', $consultantSelected[0] ?? '', $pA1); if (is_array($consultantSingle)) { $consultantSingle = (string) ($consultantSingle[0] ?? ''); } $contractorSingle = report_wizard_old('part_a.scheme_unit.contractors', $contractorSelected[0] ?? '', $pA1); if (is_array($contractorSingle)) { $contractorSingle = (string) ($contractorSingle[0] ?? ''); } $mecSidA1 = isset($mecSectorId) ? (int) $mecSectorId : null; $rtA1 = MecReportType::normalize((string) ($reportType ?? '')); $showTypeOfSchemeA1 = in_array($rtA1, [MecReportType::RMR, MecReportType::CMR], true); $typeOfSchemePrefill = ''; if ($showTypeOfSchemeA1) { $typeOfSchemePrefill = $schemeProject !== null ? mec_report_type_of_scheme_from_project($schemeProject) : ''; if ($typeOfSchemePrefill === '') { $storedTypeOfScheme = trim((string) report_wizard_old('part_a.scheme_unit.type_of_scheme', '', $pA1)); $typeOfSchemePrefill = $storedTypeOfScheme !== '' ? \App\Services\ReportPreviewPresenter::normalizeTypeOfSchemeLabel($storedTypeOfScheme) : ''; } } @endphp {{-- Part A §1 — Scheme / Unit Information (same green table layout as §2; collapsible title is parent only) --}}
@if ($showTypeOfSchemeA1) @endif @if ($a1LocationSectionLabel) @endif @include('reports.partials.a1-unit-breakdown-section', [ 'fieldKey' => 'gps', 'mode' => $gpsReportingMode, 'sectionLabel' => __('GPS Location Coordinates'), 'gpsPairRows' => $gpsPairRows, 'gpsUnits' => $gpsUnits, ]) @if ($isPmrA1) @endif @include('reports.partials.a1-unit-breakdown-section', [ 'fieldKey' => 'consultants', 'mode' => $consultantsReportingMode, 'sectionLabel' => __($a1ConsultantLabel), 'consultantSelected' => $consultantSelected, 'consultantSelectedLower' => $consultantSelectedLower, 'consultantUnits' => $consultantUnits, 'consultantOptions' => $consultantOptions, ]) @include('reports.partials.a1-unit-breakdown-section', [ 'fieldKey' => 'contractors', 'mode' => $contractorsReportingMode, 'sectionLabel' => __($a1ContractorLabel), 'contractorSelected' => $contractorSelected, 'contractorSelectedLower' => $contractorSelectedLower, 'contractorUnits' => $contractorUnits, 'contractorOptions' => $contractorOptions, ]) @if ($isPmrA1) @else @endif @if ($isPmrA1) @endif @if (! $isPmrA1) @endif
{{ $a1AdpLabel }} @error('report.part_a.scheme_unit.adp_no') {{ $message }} @enderror @if (trim((string) ($reportStoredFinancialYear ?? '')) !== '')
{{ __('Financial Year') }}: {{ $reportStoredFinancialYear }}
@endif
UID No. @error('report.part_a.scheme_unit.uid_no') {{ $message }} @enderror
{{ $a1NameLabel }} @error('report.part_a.scheme_unit.scheme_name_qrc') {{ $message }} @enderror
{{ $a1SdgLabel }} @if ($sdgGoalsEditable) {{ __('Select one or more SDG numbers, or choose N/A if none apply.') }} @else
@php $selectedSdgGoals = $reportSdgGoalsList ->filter(fn ($goal) => in_array((int) $goal->id, $selectedSdgGoalIds, true)) ->values(); @endphp @forelse ($selectedSdgGoals as $sdgGoal) SDG {{ (int) $sdgGoal->id }} @empty {{ __('No SDG goals linked in latest PC-I.') }} @endforelse
@endif {{ __('Please select at least one :label, or N/A.', ['label' => $a1SdgLabel]) }} @error('report.part_a.scheme_unit.sdg_goal_ids') {{ $message }} @enderror @error('report.part_a.scheme_unit.sdg_goal_ids.*') {{ $message }} @enderror
Type of Scheme @error('report.part_a.scheme_unit.type_of_scheme') {{ $message }} @enderror
{{ $a1LocationSectionLabel }}
UC / Town
@foreach ($visitUcTownRowValues as $idx => $ucTownVal)
@endforeach
@error('report.part_a.scheme_unit.visit_uc_towns') {{ $message }} @enderror @foreach ($visitUcTownRowValues as $idx => $_) @error('report.part_a.scheme_unit.visit_uc_towns.'.$idx) {{ $message }} @enderror @endforeach
{{ $a1DistrictLabel }}
@foreach ($visitDistrictRowValues as $idx => $districtVal)
@if (count($a1DistrictCatalog) > 0) @else @endif
@endforeach
@error('report.part_a.scheme_unit.visit_districts') {{ $message }} @enderror @foreach ($visitDistrictRowValues as $idx => $_) @error('report.part_a.scheme_unit.visit_districts.'.$idx) {{ $message }} @enderror @endforeach
{{ $a1AdminLabel }} @error('report.part_a.scheme_unit.administrative_department') {{ $message }} @enderror
Funding Agency (s) @error('report.part_a.scheme_unit.funding_agencies') {{ $message }} @enderror
{{ $a1EaLabel }}
@foreach ($executingAgencyRowValues as $idx => $eaVal) @php $eaVal = (string) $eaVal; $rowEaOptions = $a1EaOptionsForRow((int) $idx, $executingAgencyRowValues, $a1EaCatalog); @endphp
@endforeach
@error('report.part_a.scheme_unit.executing_agencies') {{ $message }} @enderror @foreach ($executingAgencyRowValues as $idx => $_) @error('report.part_a.scheme_unit.executing_agencies.'.$idx) {{ $message }} @enderror @endforeach
PC-I Status @error('report.part_a.scheme_unit.pc_i_revision_status') {{ $message }} @enderror {{ $a1PcIOriginalDateLabel }} @error('report.part_a.scheme_unit.pc_i_original_approval_date') {{ $message }} @enderror {{ $a1PcIOriginalDateLabel }} @if ($schemeIdentityReadonly) @else @endif @error('report.part_a.scheme_unit.pc_i_revision_date') {{ $message }} @enderror
{{ $a1PcICompletionDateLabel }} @if ($schemeIdentityReadonly) @else @endif @error('report.part_a.scheme_unit.pc_i_completion_date') {{ $message }} @enderror
{{ $a1ObjectivesLabel }} @error('report.part_a.scheme_unit.scheme_objectives_pc_i') {{ $message }} @enderror
Scheme Scope (as per PC-I) @error('report.part_a.scheme_unit.scheme_scope_pc_i') {{ $message }} @enderror
@include('reports.partials.report-scheme-party-modal') @include('reports.partials.a1-unit-breakdown-templates') @push('scripts') @endpush @push('stylesheets') @endpush @push('scripts') @endpush @include('reports.partials.report-scheme-party-select-script') @include('reports.partials.a1-unit-breakdown-scripts', [ 'consultantOptions' => $consultantOptions, 'contractorOptions' => $contractorOptions, ])