Adding delay and penalty calculations

This commit is contained in:
2026-07-22 14:10:05 +03:30
parent 28bf82cde9
commit e1f86e6ffe
21 changed files with 1285 additions and 99 deletions
+11 -22
View File
@@ -19,6 +19,7 @@ use App\Models\User;
use App\Models\Log;
use Carbon\Carbon;
use App\Models\ai;
use App\Services\LatePenaltyService;
class AttendanceController extends Controller
@@ -294,26 +295,9 @@ class AttendanceController extends Controller
->latest('entered_at')
->first();
if ($attendance) {
// خروج
//end task
if (!empty($user->active_task)) {
$taskDu = TaskDuration::where('user_id', $user->id)->whereNull('end')->whereNull('duration')->get();
if ($taskDu) {
foreach ($taskDu as $item) {
$fakeRequest = Request::create(
'/active_task', // مسیر فرضی (مهم نیست)
'POST',
['task_id' => $item->task_id] // شناسه تسک
);
if ($item->end == null) {
(new TaskController())->activeTask($fakeRequest);
}
}
}
$user->active_task = null;
$user->save();
}
if ($attendance) {
// خروج — همه تسک‌های باز کاربر بسته شود
app(TaskController::class)->endOpenDurationsForUser($user);
//end break
if ($break = AttendanceBreak::where('attendance_id', $attendance->id)->whereNull('break_end')->latest('break_start')->first()) {
@@ -322,6 +306,7 @@ class AttendanceController extends Controller
$break->save();
}
$break = AttendanceBreak::where('attendance_id', $attendance->id)->sum('duration');
$attendance->exited_at = Carbon::now()->format('Y-m-d H:i:s');
$start = Carbon::parse($attendance->entered_at)->format('H:i:s');
$end = Carbon::parse($attendance->exited_at)->format('H:i:s');
$duration = $attendance->duration($start, $end);
@@ -330,10 +315,9 @@ class AttendanceController extends Controller
$breakSec = strtotime("1970-01-01 " . $break) - strtotime("1970-01-01 00:00:00");
$durationSec = strtotime("1970-01-01 " . $duration) - strtotime("1970-01-01 00:00:00");
$durationSec -= $breakSec;
$duration = gmdate("H:i:s", $durationSec);
$duration = gmdate("H:i:s", max(0, $durationSec));
}
$attendance->exited_at = Carbon::now()->format('Y-m-d H:i:s');
$attendance->exit_location = ['lat' => $userLat, 'lng' => $userLng];
$attendance->ip_exit = $userLng;
$attendance->distance_exit = $request->input('distance');
@@ -359,6 +343,8 @@ class AttendanceController extends Controller
$attendance->office_location = ['lat' => $officeLat, 'lng' => $officeLng];
$attendance->save();
app(LatePenaltyService::class)->syncAttendance($attendance);
$this->send($user->name, $attendance, 'attendance');
return redirect()->back()->with('message', [
@@ -648,6 +634,9 @@ class AttendanceController extends Controller
$user->email = $request->email;
$user->number = $request->number;
$user->chatid = $request->chatid;
$user->birthday = $request->filled('birthday')
? $this->fa2en_numbers($request->birthday)
: null;
// اگر کاربر ادمین باشه، می‌تونه نقش رو تغییر بده
if (!empty($_COOKIE['ad'])) {