@php $inputClass = 'dark:bg-dark-900 shadow-theme-xs focus:border-brand-300 focus:ring-brand-500/10 dark:focus:border-brand-800 h-11 w-full rounded-lg border bg-transparent px-4 py-2.5 text-sm text-gray-800 placeholder:text-gray-400 focus:ring-3 focus:outline-hidden dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30'; $selectClass = 'dark:bg-dark-900 shadow-theme-xs focus:border-brand-300 focus:ring-brand-500/10 dark:focus:border-brand-800 h-11 w-full appearance-none rounded-lg border bg-transparent px-4 py-2.5 text-sm text-gray-800 focus:ring-3 focus:outline-hidden dark:bg-gray-900 dark:text-white/90'; $labelClass = 'mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-400'; $errorClass = 'border-error-300 focus:border-error-300 focus:ring-error-500/10 dark:border-error-700'; $normalClass = 'border-gray-300 dark:border-gray-700'; $dateClass = 'dark:bg-dark-900 shadow-theme-xs focus:border-brand-300 focus:ring-brand-500/10 dark:focus:border-brand-800 h-11 w-full appearance-none rounded-lg border bg-transparent bg-none px-4 py-2.5 pr-11 text-sm text-gray-800 placeholder:text-gray-400 focus:ring-3 focus:outline-hidden dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30'; $timeClass = 'dark:bg-dark-900 shadow-theme-xs focus:border-brand-300 focus:ring-brand-500/10 dark:focus:border-brand-800 h-11 w-full appearance-none rounded-lg border bg-transparent bg-none px-4 py-2.5 pr-16 text-sm text-gray-800 placeholder:text-gray-400 focus:ring-3 focus:outline-hidden dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30'; $groupLabelClass = 'mb-3 text-theme-xs font-medium tracking-wide text-gray-400 uppercase dark:text-gray-500'; @endphp {{-- ================= Translations (concept sama seperti content-application) ================= --}} @php $existingTranslations = isset($tender) ? $tender->translations->keyBy('language') : collect(); $firstLang = $languages->keys()->first(); $mainLangCode = $firstLang; foreach ($languages as $code => $descr) { if (old('translations.'.$code.'.main')) { $mainLangCode = $code; break; } } if (isset($tender) && ! old('translations.'.$mainLangCode.'.main')) { $existingMain = $tender->translations->firstWhere('main', true); $mainLangCode = $existingMain->language ?? $mainLangCode; } $titleErrorLang = null; foreach ($languages as $code => $descr) { if ($errors->has('translations.'.$code.'.title')) { $titleErrorLang = $code; break; } } $initialLang = $titleErrorLang ?? $mainLangCode; @endphp

Translations

@foreach ($languages as $code => $descr)
@endforeach
@foreach ($languages as $code => $descr) @php $translation = $existingTranslations[$code] ?? null; @endphp
@error('translations.'.$code.'.title')

{{ $message }}

@else @if ($loop->first && $errors->has('translations'))

{{ $errors->first('translations') }}

@endif @enderror
@endforeach
{{-- ================= Tender information ================= --}}

Tender Information

@error('tender_code')

{{ $message }}

@enderror
@include('backend.module.contentTender.partials._select', [ 'name' => 'tender_portal', 'label' => 'Portal Display', 'options' => $portals, 'selected' => old('tender_portal', $tender->tender_portal ?? $defaultSiteSlug), 'placeholder' => '-- Select Portal --', ])
@include('backend.module.contentTender.partials._select', [ 'name' => 'tender_type', 'label' => 'Type', 'options' => $types, 'selected' => old('tender_type', $tender->tender_type ?? ''), 'placeholder' => '-- Select Type --', 'required' => true, ]) @include('backend.module.contentTender.partials._select', [ 'name' => 'tender_category', 'label' => 'Category', 'options' => $categories, 'selected' => old('tender_category', $tender->tender_category ?? ''), 'placeholder' => '-- Select Category --', 'required' => true, ]) @include('backend.module.contentTender.partials._select', [ 'name' => 'tender_method', 'label' => 'Method', 'options' => $methods, 'selected' => old('tender_method', $tender->tender_method ?? ''), 'placeholder' => '-- Select Method --', ]) @include('backend.module.contentTender.partials._select', [ 'name' => 'tender_status', 'label' => 'Status', 'options' => $statuses, 'selected' => old('tender_status', $tender->tender_status ?? ''), 'placeholder' => '-- Select Status --', 'required' => true, 'firstWhenEmpty' => true, ])
{{-- ================= Dates ================= --}}

Important Dates

Open / Closed status is derived automatically from the closing date and time.

Tender Period

@include('backend.module.contentTender.partials._date-input', [ 'name' => 'tender_open_date', 'value' => old('tender_open_date', isset($tender) && $tender->tender_open_date ? $tender->tender_open_date->format('Y-m-d') : ''), ]) @error('tender_open_date')

{{ $message }}

@enderror
@include('backend.module.contentTender.partials._time-input', [ 'name' => 'tender_open_time', 'value' => old('tender_open_time', $tender->tender_open_time ?? ''), ]) @error('tender_open_time')

{{ $message }}

@enderror
@include('backend.module.contentTender.partials._date-input', [ 'name' => 'tender_close_date', 'value' => old('tender_close_date', isset($tender) && $tender->tender_close_date ? $tender->tender_close_date->format('Y-m-d') : ''), ]) @error('tender_close_date')

{{ $message }}

@enderror
@include('backend.module.contentTender.partials._time-input', [ 'name' => 'tender_close_time', 'value' => old('tender_close_time', $tender->tender_close_time ?? ''), ]) @error('tender_close_time')

{{ $message }}

@enderror

Briefing & Site Visit

@include('backend.module.contentTender.partials._date-input', [ 'name' => 'tender_briefing_date', 'value' => old('tender_briefing_date', isset($tender) && $tender->tender_briefing_date ? $tender->tender_briefing_date->format('Y-m-d') : ''), ]) @error('tender_briefing_date')

{{ $message }}

@enderror
@include('backend.module.contentTender.partials._time-input', [ 'name' => 'tender_briefing_time', 'value' => old('tender_briefing_time', $tender->tender_briefing_time ?? ''), ]) @error('tender_briefing_time')

{{ $message }}

@enderror
@include('backend.module.contentTender.partials._date-input', [ 'name' => 'tender_site_visit_date', 'value' => old('tender_site_visit_date', isset($tender) && $tender->tender_site_visit_date ? $tender->tender_site_visit_date->format('Y-m-d') : ''), ]) @error('tender_site_visit_date')

{{ $message }}

@enderror
@error('tender_briefing_place')

{{ $message }}

@enderror
{{-- ================= Documents ================= --}}

Documents

PDF, Word, Excel or ZIP — max 150MB per file.

@if (! empty($tender->tender_document)) @endif
@error('tender_document')

{{ $message }}

@enderror
@if (! empty($tender->tender_result_document)) @endif
@error('tender_result_document')

{{ $message }}

@enderror
@error('tender_result_notes')

{{ $message }}

@enderror
{{-- Attachments (multiple) — sebahagian daripada borang utama --}}

Attachments

BOQ, price schedule, drawings or specifications. You can select more than one file.

@if (isset($tender) && $tender->documents->isNotEmpty()) {{ $tender->documents->count() }} {{ \Illuminate\Support\Str::plural('file', $tender->documents->count()) }} @endif
@if (isset($tender) && $tender->documents->isNotEmpty()) @endif

PDF, Word, Excel or ZIP · max 150MB per file · up to 20 files at a time

@error('attachments')

{{ $message }}

@enderror @error('attachments.*')

{{ $message }}

@enderror
{{-- ================= Contact ================= --}}

Contact & Reference

@error('tender_contact_name')

{{ $message }}

@enderror
@error('tender_contact_phone')

{{ $message }}

@enderror
@error('tender_contact_email')

{{ $message }}

@enderror
@error('tender_reference_url')

{{ $message }}

@enderror