Changes to holidays and the overlap between this year and the previous year
This commit is contained in:
@@ -207,6 +207,17 @@ class AdminController extends Controller
|
||||
foreach ($pendingForUser->values() as $index => $attendance) {
|
||||
$raw = $rawValues[$index] ?? null;
|
||||
if (!$raw) {
|
||||
// Redis موجود است ولی کلید نیست → درخواست قبلاً تایید/رد شده؛ پرچم کهنه را پاک کن
|
||||
$attendance->requested = null;
|
||||
$attendance->save();
|
||||
continue;
|
||||
}
|
||||
|
||||
$decoded = json_decode($raw);
|
||||
if (($decoded->function ?? null) === 'rejected') {
|
||||
Redis::del("att-tempreq:{$user->user_name}:{$attendance->id}");
|
||||
$attendance->requested = null;
|
||||
$attendance->save();
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -219,12 +230,15 @@ class AdminController extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($pendingForUser as $attendance) {
|
||||
if (isset($loadedIds[(string) $attendance->id])) {
|
||||
continue;
|
||||
}
|
||||
// فقط وقتی Redis در دسترس نیست از fallback استفاده کن
|
||||
if (!$redisAvailable) {
|
||||
foreach ($pendingForUser as $attendance) {
|
||||
if (isset($loadedIds[(string) $attendance->id])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$rec['attendances'][] = $this->buildFallbackRequestFromAttendance($attendance);
|
||||
$rec['attendances'][] = $this->buildFallbackRequestFromAttendance($attendance);
|
||||
}
|
||||
}
|
||||
|
||||
$pendingById = $pendingForUser->keyBy('id');
|
||||
@@ -239,6 +253,46 @@ class AdminController extends Controller
|
||||
return $records;
|
||||
}
|
||||
|
||||
private function removeCreateRequest(string $userid, object $data): void
|
||||
{
|
||||
$key = "att-tempreq:creates:{$userid}";
|
||||
try {
|
||||
$items = Redis::lrange($key, 0, -1);
|
||||
} catch (\Throwable) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($items as $item) {
|
||||
$decoded = json_decode($item);
|
||||
if (!$decoded) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$sameUser = ($decoded->userid ?? null) === ($data->userid ?? null);
|
||||
$sameEnter = (string) ($decoded->oldenter ?? '') === (string) ($data->oldenter ?? '');
|
||||
$sameExit = (string) ($decoded->oldexit ?? '') === (string) ($data->oldexit ?? '');
|
||||
|
||||
if ($sameUser && $sameEnter && $sameExit) {
|
||||
Redis::lrem($key, 1, $item);
|
||||
}
|
||||
}
|
||||
|
||||
Redis::del("att-tempreq:{$userid}:new");
|
||||
}
|
||||
|
||||
private function clearAttendanceRequestFlag($attendanceId): void
|
||||
{
|
||||
if (!$attendanceId || $attendanceId === 'new') {
|
||||
return;
|
||||
}
|
||||
|
||||
$att = Attendance::find($attendanceId);
|
||||
if ($att) {
|
||||
$att->requested = null;
|
||||
$att->save();
|
||||
}
|
||||
}
|
||||
|
||||
private function enrichUsersForDashboard($users): void
|
||||
{
|
||||
$userNames = $users->pluck('user_name');
|
||||
@@ -579,7 +633,7 @@ class AdminController extends Controller
|
||||
}
|
||||
|
||||
$record->duration = $duration ?? $record->duration;
|
||||
$record->requested = '';
|
||||
$record->requested = null;
|
||||
$record->save();
|
||||
app(LatePenaltyService::class)->syncAttendance($record);
|
||||
|
||||
@@ -617,8 +671,7 @@ class AdminController extends Controller
|
||||
: null;
|
||||
$attendance->save();
|
||||
app(LatePenaltyService::class)->syncAttendance($attendance);
|
||||
$create_requests_key = "att-tempreq:creates:{$data->userid}";
|
||||
Redis::connection()->lrem($create_requests_key, 1, json_encode($data));
|
||||
$this->removeCreateRequest($data->userid, $data);
|
||||
$this->decrementUserRequestCount($data->userid);
|
||||
|
||||
tel_notif($data->userid, "تایید");
|
||||
@@ -633,18 +686,11 @@ class AdminController extends Controller
|
||||
if ($request->update == 'reject') {
|
||||
if ($data->function == 'delete' || $data->function == 'edit') {
|
||||
Redis::connection()->del("att-tempreq:{$data->userid}:{$data->id}");
|
||||
$this->clearAttendanceRequestFlag($data->id ?? null);
|
||||
} elseif ($data->function == 'new') {
|
||||
$create_requests_key = "att-tempreq:creates:{$data->userid}";
|
||||
Redis::connection()->lrem($create_requests_key, 1, json_encode($data));
|
||||
$this->removeCreateRequest($data->userid, $data);
|
||||
}
|
||||
|
||||
// dd($data->id);
|
||||
if ($data->id !== "new") {
|
||||
$att = Attendance::find($data->id);
|
||||
// dd($att);
|
||||
$att->requested = null;
|
||||
$att->save();
|
||||
}
|
||||
tel_notif($data->userid, "رد");
|
||||
$this->decrementUserRequestCount($data->userid);
|
||||
return redirect()->back()->with('message', [
|
||||
|
||||
Reference in New Issue
Block a user