Adding delay and penalty calculations
This commit is contained in:
@@ -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'])) {
|
||||
|
||||
Reference in New Issue
Block a user