Files

253 lines
14 KiB
PHP
Raw Permalink Normal View History

2025-10-11 13:38:30 +00:00
<?php
use Morilog\Jalali\Jalalian;
use Carbon\Carbon;
$usersChunked = $users->chunk(3);
?>
@extends('app')
@section('content')
<div class="container w-full flex flex-col items-center">
2026-07-26 10:49:48 +03:30
@if(isset($leaveRequests) && $leaveRequests->isNotEmpty())
<div class="ui-requests-card flex flex-col items-center w-full max-w-[350px] mb-4">
<p>درخواست‌های مرخصی</p>
<div class="ui-table-wrap w-full pt-2">
<table class="w-full table-auto text-sm">
<thead>
<tr>
<th class="px-2 py-2">کارمند</th>
<th class="px-2 py-2">نوع</th>
<th class="px-2 py-2">بازه</th>
<th class="px-2 py-2">وضعیت</th>
</tr>
</thead>
<tbody>
@foreach($leaveRequests as $leave)
@php
$ownerName = $leave->user->name ?? $leave->user_identity;
$fromJ = \App\Support\JalaliHelper::format($leave->date_from, 'Y/m/d');
$toJ = \App\Support\JalaliHelper::format($leave->date_to, 'Y/m/d');
if ($leave->type === 'daily') {
$range = $fromJ === $toJ ? $fromJ : "{$fromJ} تا {$toJ}";
} else {
$tf = substr((string) $leave->time_from, 0, 5);
$tt = substr((string) $leave->time_to, 0, 5);
$range = "{$fromJ}<br>{$tf}–{$tt}";
}
@endphp
<tr>
<td class="px-2 py-2 border">{{ $ownerName }}</td>
<td class="px-2 py-2 border">{{ $leave->type === 'daily' ? 'روزانه' : 'ساعتی' }}</td>
<td class="px-2 py-2 border">{!! $range !!}</td>
<td class="px-2 py-2 border">
@if($leave->reason)
<p class="text-xs mb-1 opacity-80">{{ $leave->reason }}</p>
@endif
<form method="post" action="{{ route('admin.leave.decide') }}" class="inline">
@csrf
<input type="hidden" name="leave_id" value="{{ $leave->id }}">
<input type="hidden" name="update" value="approve">
<button type="submit" class="ui-btn-approve">تایید</button>
</form>
<form method="post" action="{{ route('admin.leave.decide') }}" class="inline">
@csrf
<input type="hidden" name="leave_id" value="{{ $leave->id }}">
<input type="hidden" name="update" value="reject">
<button type="submit" class="ui-btn-reject">رد</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
@endif
2025-10-11 13:38:30 +00:00
@if(!collect($reqs)->pluck('attendances')->flatten()->isEmpty())
2026-06-02 22:17:47 +03:30
<div class="ui-requests-card flex flex-col items-center w-full max-w-[350px]">
<p>درخواست ها</p>
2025-10-11 13:38:30 +00:00
@foreach ($reqs as $u)
@if(!empty($u['attendances']))
<button type="button"
class="ui-chip-btn"
onclick="togglerequests('attendance-{{ $loop->index }}')">
2025-10-11 13:38:30 +00:00
{{ $u['name'] }}
2026-06-02 22:17:47 +03:30
<span class="mr-1 text-xs opacity-90">({{ count($u['attendances']) }})</span>
2025-10-11 13:38:30 +00:00
</button>
2026-06-02 22:17:47 +03:30
<div id="attendance-{{ $loop->index }}" class="hidden-content pt-4 w-full">
<div class="ui-table-wrap">
<table class="w-full table-auto">
2025-10-11 13:38:30 +00:00
<thead>
<tr>
<th class="px-2 py-2 w-1/6">درخواست</th>
<th class="px-2 py-2 w-1/6">تاریخ</th>
<th class="px-2 py-2 w-1/6">ورود</th>
<th class="px-2 py-2 w-1/6">خروج</th>
<th class="px-2 py-2 w-1/6">تعیین وضعیت</th>
2025-10-11 13:38:30 +00:00
</tr>
</thead>
<tbody>
{{-- {{dd($u['attendances'])}}--}}
@forelse($u['attendances'] as $rec)
<tr class="{{ $rec->id=='new' ? 'is-new' : '' }}">
2026-04-08 07:22:13 +00:00
{{--{{dd($rec)}}--}}
2025-10-11 13:38:30 +00:00
<td class="px-4 py-2 border">{{ match ($rec->function) {
'edit' => "تغییر ساعت",
'delete' => "حذف",
'new' => "جدید",
default => "نامشخص",
} }}</td>
2026-06-02 22:17:47 +03:30
<td class="px-4 py-2 border">{{ $rec->display_date ?? '-' }}</td>
2026-04-08 07:22:13 +00:00
@php
2026-06-02 22:17:47 +03:30
$parseTime = function ($value) {
if (!$value) {
return null;
}
try {
return Carbon::parse($value)->format('H:i');
} catch (\Throwable) {
return is_string($value) && preg_match('/^\d{1,2}:\d{2}/', $value)
? substr($value, 0, 5)
: null;
}
};
$oldEnter = $parseTime($rec->oldenter ?? null);
$newEnter = $parseTime($rec->newenter ?? null);
$oldExit = $parseTime($rec->oldexit ?? null);
$newExit = $parseTime($rec->newexit ?? null);
2026-04-08 09:22:17 +00:00
@endphp
2026-04-08 07:22:13 +00:00
@if( $oldEnter == $newEnter || $newEnter == null)
<td class="px-4 py-2 border">{{ $oldEnter ?? '-' }}</td>
2025-10-11 13:38:30 +00:00
@else
2026-04-08 07:22:13 +00:00
<td class="px-4 py-2 border">{{ $oldEnter || $newEnter ? ($rec->id=='new' || $oldEnter==($newEnter ?? '') ? $oldEnter : $oldEnter.'👇🏻'.$newEnter) : '-' }}</td>
2025-10-11 13:38:30 +00:00
@endif
2026-04-08 07:22:13 +00:00
@if($oldExit == $newExit || $newExit == null)
<td class="px-4 py-2 border">{{$oldExit ? ($oldExit ?? $newExit) : '-'}}</td>
2025-10-11 13:38:30 +00:00
@else
2026-04-08 07:22:13 +00:00
<td class="px-4 py-2 border">{{ $oldExit || $newExit ? ($rec->id=='new' || $oldExit==($newExit ?? '') ? $oldExit : $oldExit.'👇🏻'.$newExit) : '-' }}</td>
2025-10-11 13:38:30 +00:00
@endif
2026-04-08 09:30:38 +00:00
{{-- @if($userType == 'admin')--}}
<td class="px-4 py-2 border">
<form method="post" action="{{route('admin.update')}}">
@csrf
<input type="hidden" name="update" id="update" value="approve">
2026-06-02 22:17:47 +03:30
<input type="hidden" name="data"
value='{{ json_encode($rec, JSON_UNESCAPED_UNICODE) }}'>
<button type="submit" class="ui-btn-approve">
2026-04-08 09:30:38 +00:00
تایید
</button>
</form>
<form method="post" action="{{route('admin.update')}}">
@csrf
<input type="hidden" name="update" id="update" value="reject">
2026-06-02 22:17:47 +03:30
<input type="hidden" name="data"
value='{{ json_encode($rec, JSON_UNESCAPED_UNICODE) }}'>
<button type="submit" class="ui-btn-reject">
2026-04-08 09:30:38 +00:00
رد
</button>
</form>
</td>
{{-- @endif--}}
2025-10-11 13:38:30 +00:00
</tr>
@empty
<tr>
<td class="px-4 py-2 border text-center" colspan="6">هیچ رکوردی ثبت نشده</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
2026-06-02 22:17:47 +03:30
@endif
2025-10-11 13:38:30 +00:00
@endforeach
</div>
@endif
<div class="container" style="padding-top: 20px">
<div class="grid grid-cols-2 grid-rows-none ">
@foreach ($usersChunked as $chunk)
@foreach ($chunk as $u)
@php
$cardClass = 'ui-user-card m-3';
if ($u->active_task) {
$cardClass .= ' is-active';
} elseif ($u->working == 1) {
$cardClass .= ' is-working';
} elseif ($u->working == 2) {
$cardClass .= ' is-break';
}
@endphp
<div class="{{ $cardClass }}">
<a href="/admin/{{ $u->user_name }}">
<p class="ui-user-name">{{ $u->name ?? $u->user_name }}</p>
2026-04-08 07:22:13 +00:00
@if($u->active_task)
<p>وظیفه: {{ $u->active_task }}</p>
@endif
<p>کارکرد ماه جاری: {{ $u->totaltime }}</p>
2026-07-22 14:10:05 +03:30
<p>جریمه تأخیر ماه: {{ number_format($u->monthly_late_fine ?? 0) }} تومان</p>
<p>تعداد درخواست ها: {{ $u->req_counts }}</p>
2026-10-07 17:51:03 +03:30
@if($u->work_start_time)
<p>شروع کار: {{ substr((string) $u->work_start_time, 0, 5) }}</p>
@endif
2025-10-11 13:38:30 +00:00
</a>
2026-04-08 09:22:17 +00:00
@if($userType == 'admin')
<button type="button"
class="ui-chip-btn mt-2 !min-w-0 !w-auto !text-sm"
onclick="window.location.href='{{ url('attendance/profile').'?username='.$u->user_name }}'">
2026-04-08 09:22:17 +00:00
ویرایش
</button>
@endif
2025-10-11 13:38:30 +00:00
</div>
@endforeach
@endforeach
<a class="ui-user-card m-3 flex items-center justify-center min-h-[140px]" href="{{route('admin.new')}}">
<i class="fa-regular fa-plus text-5xl text-gray-400"></i>
2025-10-11 13:38:30 +00:00
</a>
</div>
</div>
{{-- {{dd($reqs)}}--}}
{{--MODAL--}}
@endsection
@section('script')
<script>
// این تابع اکنون یک DIV را باز و بسته می‌کند
function togglerequests(elementId) {
var contentDiv = document.getElementById(elementId);
// بررسی می‌کند اگر عنصر دارای کلاس 'hidden-content' هست، آن را حذف و نمایش دهد، وگرنه اضافه و پنهان کند.
if (contentDiv.classList.contains('hidden-content')) {
contentDiv.classList.remove('hidden-content');
// اگر از Tailwind استفاده می‌کنید، ممکن است بخواهید: contentDiv.classList.remove('hidden');
} else {
contentDiv.classList.add('hidden-content');
// contentDiv.classList.add('hidden');
}
}
</script>
<style>
/* نیاز به این کلاس برای پنهان کردن اولیه محتوا */
.hidden-content {
display: none;
}
</style>
@endsection