Files
a.montask/resources/views/admin/admin.blade.php
T
2026-07-26 10:49:48 +03:30

250 lines
14 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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">
@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
@if(!collect($reqs)->pluck('attendances')->flatten()->isEmpty())
<div class="ui-requests-card flex flex-col items-center w-full max-w-[350px]">
<p>درخواست ها</p>
@foreach ($reqs as $u)
@if(!empty($u['attendances']))
<button type="button"
class="ui-chip-btn"
onclick="togglerequests('attendance-{{ $loop->index }}')">
{{ $u['name'] }}
<span class="mr-1 text-xs opacity-90">({{ count($u['attendances']) }})</span>
</button>
<div id="attendance-{{ $loop->index }}" class="hidden-content pt-4 w-full">
<div class="ui-table-wrap">
<table class="w-full table-auto">
<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>
</tr>
</thead>
<tbody>
{{-- {{dd($u['attendances'])}}--}}
@forelse($u['attendances'] as $rec)
<tr class="{{ $rec->id=='new' ? 'is-new' : '' }}">
{{--{{dd($rec)}}--}}
<td class="px-4 py-2 border">{{ match ($rec->function) {
'edit' => "تغییر ساعت",
'delete' => "حذف",
'new' => "جدید",
default => "نامشخص",
} }}</td>
<td class="px-4 py-2 border">{{ $rec->display_date ?? '-' }}</td>
@php
$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);
@endphp
@if( $oldEnter == $newEnter || $newEnter == null)
<td class="px-4 py-2 border">{{ $oldEnter ?? '-' }}</td>
@else
<td class="px-4 py-2 border">{{ $oldEnter || $newEnter ? ($rec->id=='new' || $oldEnter==($newEnter ?? '') ? $oldEnter : $oldEnter.'👇🏻'.$newEnter) : '-' }}</td>
@endif
@if($oldExit == $newExit || $newExit == null)
<td class="px-4 py-2 border">{{$oldExit ? ($oldExit ?? $newExit) : '-'}}</td>
@else
<td class="px-4 py-2 border">{{ $oldExit || $newExit ? ($rec->id=='new' || $oldExit==($newExit ?? '') ? $oldExit : $oldExit.'👇🏻'.$newExit) : '-' }}</td>
@endif
{{-- @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">
<input type="hidden" name="data"
value='{{ json_encode($rec, JSON_UNESCAPED_UNICODE) }}'>
<button type="submit" class="ui-btn-approve">
تایید
</button>
</form>
<form method="post" action="{{route('admin.update')}}">
@csrf
<input type="hidden" name="update" id="update" value="reject">
<input type="hidden" name="data"
value='{{ json_encode($rec, JSON_UNESCAPED_UNICODE) }}'>
<button type="submit" class="ui-btn-reject">
رد
</button>
</form>
</td>
{{-- @endif--}}
</tr>
@empty
<tr>
<td class="px-4 py-2 border text-center" colspan="6">هیچ رکوردی ثبت نشده</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
@endif
@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>
@if($u->active_task)
<p>وظیفه: {{ $u->active_task }}</p>
@endif
<p>کارکرد ماه جاری: {{ $u->totaltime }}</p>
<p>جریمه تأخیر ماه: {{ number_format($u->monthly_late_fine ?? 0) }} تومان</p>
<p>تعداد درخواست ها: {{ $u->req_counts }}</p>
</a>
@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 }}'">
ویرایش
</button>
@endif
</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>
</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