@extends('layouts.app', ['class' => 'g-sidenav-show bg-gray-100']) {{-- section content --}} @section('content') @include('layouts.navbars.auth.topnav', ['title' => '']) @php $formatShiftClock = function ($value) { if ($value === null || $value === '') { return '-'; } if (!is_numeric($value)) { return (string) $value; } $totalMinutes = (int) $value; $hours = intdiv($totalMinutes, 60); $minutes = $totalMinutes % 60; return sprintf('%02d:%02d', $hours, $minutes); }; $formatShiftClockWithDay = function ($value) use ($formatShiftClock) { if ($value === null || $value === '' || !is_numeric($value)) { return $formatShiftClock($value); } $minutes = (int) $value; if ($minutes < 1440) { return $formatShiftClock($minutes); } return $formatShiftClock($minutes - 1440) . ' (+1)'; }; @endphp
@if ($table_header_l->isNotEmpty() || $table_header_r->isNotEmpty())
@csrf @method('PUT')
{{-- Custom CSS untuk Dynamic Grid Modules --}} @if (in_array($dmenu, ['mstkry', 'mstjsh', 'mstkls'])) @endif

View {{ $title_menu }}


@php // Manual Field Distribution untuk 3 modul spesifik $useManualGrid = in_array($dmenu, ['mstkry', 'mstjsh', 'mstkls']); // Single column layout untuk modul dengan field sedikit $useSingleColumn = in_array($dmenu, ['mstdpt', 'mstkns', 'mstplg']); if ($useManualGrid) { // Merge dan unique by field $allFields = $table_header_l->merge($table_header_r)->merge($table_primary)->unique('field')->values(); // Manual distribution berdasarkan dmenu if ($dmenu == 'mstkry') { // Daftar Karyawan - 11 kiri, 10 kanan (rapi dan seimbang) $leftFields = [ 'nik', 'nama', 'ktp', 'jk', 'tgl_lahir', 'agama', 'pendidikan', 'alamat', 'phone', 'email', 'email_spunindo', 'id_bank', 'no_rekening_bank', 'nama_akun_bank' ]; $rightFields = [ 'id_perusahaan', 'departemen', 'bagian', 'jabatan', 'status', 'status_kerja', 'shift', 'tgl_masuk', 'tgl_mulai_tetap', 'tgl_mulai_kontrak', 'tgl_habis_kontrak', 'bulan_kontrak', 'tgl_resign', 'nojkn', 'nojmo', 'faskes' ]; } elseif ($dmenu == 'mstjsh') { // Jadwal Shift - split tengah $totalFields = $allFields->count(); $halfPoint = ceil($totalFields / 2); $leftFields = $allFields->take($halfPoint)->pluck('field')->toArray(); $rightFields = $allFields->skip($halfPoint)->pluck('field')->toArray(); } elseif ($dmenu == 'mstkls') { // Kalender Shift - 6 kiri, 5 kanan (lebih seimbang) $leftFields = ['schedule_name', 'cycles_unit', 'cycles', 'base_date', 'day_order', 'holiday']; $rightFields = ['shift_id', 'priority', 'tanggal_mulai', 'tanggal_selesai', 'keterangan']; } // Filter & urutkan field sesuai urutan array manual $table_header_l_manual = collect($leftFields)->map(function($field) use ($allFields) { return $allFields->firstWhere('field', $field); })->filter()->values(); $table_header_r_manual = collect($rightFields)->map(function($field) use ($allFields) { return $allFields->firstWhere('field', $field); })->filter()->values(); // Fallback jika ada field tambahan dari sistem $handledFields = array_merge($leftFields, $rightFields); $remainingFields = $allFields->reject(function($item) use ($handledFields) { return in_array($item->field, $handledFields); })->values(); foreach ($remainingFields as $item) { if ($table_header_l_manual->count() <= $table_header_r_manual->count()) { $table_header_l_manual->push($item); } else { $table_header_r_manual->push($item); } } } elseif ($useSingleColumn) { // Single column: semua field di kiri, kanan kosong $table_header_l_manual = $table_header_l->merge($table_header_r)->unique('field')->values(); $table_header_r_manual = collect(); // Kolom kanan kosong } @endphp
{{-- retrieve table header --}} @foreach (($useManualGrid || $useSingleColumn ? $table_header_l_manual : $table_header_l) as $header) @php $primary = false; $generateid = false; foreach ($table_primary as $p) { $primary == false ? ($p->field == $header->field ? ($primary = true) : ($primary = false)) : ''; $generateid == false ? ($p->generateid == $header->field ? ($generateid = true) : ($generateid = false)) : ''; } $header->class == 'readonly' ? ($primary = true) : ''; @endphp
@if ($header->type != 'hidden') {{-- display label alias on type field not hidden --}} @endif {{-- field type char and string --}} @if ($header->type == 'char' || $header->type == 'string') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type text --}} @elseif ($header->type == 'text') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type email --}} @elseif ($header->type == 'email') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type number --}} @elseif ($header->type == 'number') @php $isShiftTimeField = $dmenu == 'mstjsh' && in_array($header->field, ['begin_time', 'end_time', 'cin', 'cout', 'bcin', 'ecin', 'bcout', 'ecout'], true); @endphp @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type currency --}} @elseif ($header->type == 'currency') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type search --}} @elseif ($header->type == 'search')
@if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type image --}} @elseif ($header->type == 'image')
image

Maksimal Size : {{ $header->length }} KB

@if ($header->note != '')

{{ $header->note }}

@else

Format Image : PNG,JPG,JPEG

@endif {{-- field type password --}} @elseif ($header->type == 'password')
filter == '1' ? ' type=password' : ' type=hidden') }} value="{{ $list ? '' : $header->default }}" name="{{ $header->field }}" max="{{ $header->length }}">

Default Password : {{ $header->default }}

{{-- field type file --}} @elseif ($header->type == 'file')

{{ $list ? $list->{$header->field} : old($header->field) }}

Maksimal Size : {{ $header->length }} KB

@if ($header->note != '')

{{ $header->note }}

@else

Format File : pdf,xls,xlsx

@endif {{-- field type date --}} @elseif ($header->type == 'date') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type hidden --}} @elseif ($header->type == 'hidden') {{-- field type enum --}} @elseif ($header->type == 'enum') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif @endif @error($header->field)

{{ $message }}

@enderror
@endforeach
@if(!$useSingleColumn) {{-- KOLOM KANAN - Disembunyikan untuk single column layout --}}
{{-- retrieve table header --}} @foreach (($useManualGrid ? $table_header_r_manual : $table_header_r) as $header) @php $primary = false; $generateid = false; foreach ($table_primary as $p) { $primary == false ? ($p->field == $header->field ? ($primary = true) : ($primary = false)) : ''; $generateid == false ? ($p->generateid == $header->field ? ($generateid = true) : ($generateid = false)) : ''; } $header->class == 'readonly' ? ($primary = true) : ''; @endphp
@if ($header->type != 'hidden') {{-- display label alias on type field not hidden --}} @endif {{-- field type char and string --}} @if ($header->type == 'char' || $header->type == 'string') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type text --}} @elseif ($header->type == 'text') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type email --}} @elseif ($header->type == 'email') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type number --}} @elseif ($header->type == 'number') @php $isShiftTimeField = $dmenu == 'mstjsh' && in_array($header->field, ['begin_time', 'end_time', 'cin', 'cout', 'bcin', 'ecin', 'bcout', 'ecout'], true); @endphp @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type currency --}} @elseif ($header->type == 'currency') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type search --}} @elseif ($header->type == 'search')
@if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type image --}} @elseif ($header->type == 'image')
image

Maksimal Size : {{ $header->length }} KB

@if ($header->note != '')

{{ $header->note }}

@else

Format Image : PNG,JPG,JPEG

@endif {{-- field type password --}} @elseif ($header->type == 'password')
filter == '1' ? ' type=password' : ' type=hidden') }} value="{{ $list ? '' : $header->default }}" name="{{ $header->field }}" max="{{ $header->length }}">

Default Password : {{ $header->default }}

{{-- field type file --}} @elseif ($header->type == 'file')

{{ $list ? $list->{$header->field} : old($header->field) }}

Maksimal Size : {{ $header->length }} KB

@if ($header->note != '')

{{ $header->note }}

@else

Format File : pdf,xls,xlsx

@endif {{-- field type date --}} @elseif ($header->type == 'date') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type hidden --}} @elseif ($header->type == 'hidden') {{-- field type enum --}} @elseif ($header->type == 'enum') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif @endif @error($header->field)

{{ $message }}

@enderror
@endforeach
@endif

@else
@csrf @method('PUT')

View {{ $title_menu }}


{{-- retrieve table header --}} @foreach ($table_header as $header) @php $primary = false; $generateid = false; foreach ($table_primary as $p) { $primary == false ? ($p->field == $header->field ? ($primary = true) : ($primary = false)) : ''; $generateid == false ? ($p->generateid == $header->field ? ($generateid = true) : ($generateid = false)) : ''; } $header->class == 'readonly' ? ($primary = true) : ''; @endphp
@if ($header->type != 'hidden') {{-- display label alias on type field not hidden --}} @endif {{-- field type char and string --}} @if ($header->type == 'char' || $header->type == 'string') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type text --}} @elseif ($header->type == 'text') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type email --}} @elseif ($header->type == 'email') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type number --}} @elseif ($header->type == 'number') @php $isShiftTimeField = $dmenu == 'mstjsh' && in_array($header->field, ['begin_time', 'end_time', 'cin', 'cout', 'bcin', 'ecin', 'bcout', 'ecout'], true); @endphp @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type currency --}} @elseif ($header->type == 'currency') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type search --}} @elseif ($header->type == 'search')
@if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type image --}} @elseif ($header->type == 'image')
image

Maksimal Size : {{ $header->length }} KB

@if ($header->note != '')

{{ $header->note }}

@else

Format Image : PNG,JPG,JPEG

@endif {{-- field type password --}} @elseif ($header->type == 'password')
filter == '1' ? ' type=password' : ' type=hidden') }} value="{{ $list ? '' : $header->default }}" name="{{ $header->field }}" max="{{ $header->length }}">

Default Password : {{ $header->default }}

{{-- field type file --}} @elseif ($header->type == 'file')

{{ $list ? $list->{$header->field} : old($header->field) }}

Maksimal Size : {{ $header->length }} KB

@if ($header->note != '')

{{ $header->note }}

@else

Format File : pdf,xls,xlsx

@endif {{-- field type date --}} @elseif ($header->type == 'date') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif {{-- field type hidden --}} @elseif ($header->type == 'hidden') {{-- field type enum --}} @elseif ($header->type == 'enum') @if ($header->note != '')

{{ '*) ' . $header->note }}

@endif @endif @error($header->field)

{{ $message }}

@enderror
@endforeach

@endif
{{-- check flag js on dmenu --}} @if ($jsmenu == '1') @if (view()->exists("js.{$dmenu}")) @push('addjs') {{-- file js in folder (resources/views/js) --}} @include('js.' . $dmenu); @endpush @else @push('addjs') @endpush @endif @endif @endsection @push('js') @endpush