entered_at)->format('H:i'); $date = Jalalian::fromCarbon(Carbon::parse($data->entered_at))->format('Y/m/d'); $exit = $data->exited_at ? Carbon::parse($data->exited_at)->format('H:i') : null; // $user = json_decode($user); $message = "تاریخ: {$date}\n {$user} در ساعت "; if (!$exit) { $message .= "{$enter} وارد شد."; } else { $message .= "{$exit} خارج شد."; } } if ($status == 'break') { $date = Jalalian::fromCarbon(Carbon::parse($data->break_start))->format('Y/m/d'); $start = Carbon::parse($data->break_start)->format('H:i'); $end = Carbon::parse($data->break_end)->format('H:i'); if (!$data->break_end) $message = "تاریخ: {$date}\n {$user} در ساعت {$start} شروع به استراحت کرد."; else $message = "تاریخ: {$date}\n {$user} در ساعت {$end} به استراحت پایان داد."; } if ($status == 'request') { $message = "{$user} درخواست {$data} ثبت کرد."; } $admins = User::where('is_admin', '1')->whereNotNull('chatid')->select('chatid', 'user_name')->get(); foreach ($admins as $admin) { if (!$admin->chatid) continue; // dd($admin->chatid); Http::get("https://api.wwwapp.ir/telegran_send.php", [ 'botToken' => "7467099619:AAF2V6yYcbAb8oSIRSCyH5i2GKfdWVO3a7k", 'chatId' => $admin->chatid, 'message' => $message, ]); } } Route::prefix('admin')->middleware('admin')->group(function () { require __DIR__ . '/admin.php'; }); Route::get('/', function () { // dd($_SERVER); // dd($_COOKIE); if (isset($_COOKIE['user_identity'])) { return view('attendance.index'); } else { foreach (request()->cookies as $name => $value) { Cookie::queue(Cookie::forget($name)); } // در صورت نیاز session رو هم خالی کن session()->flush(); } return view('attendance.login'); }); Route::post('/back', function () { if (isset($_COOKIE['token-0'])) { setcookie("user_identity", $_COOKIE['token-0'], time() + (60 * 60 * 24 * 365), '/'); Cookie::queue(Cookie::forget('token-0')); } // if (request()->path() == '/') return redirect(route('admin.dashboard')); // return redirect()->back(); }); Route::get('/ai', function () { $response = Http::withHeaders([ 'Authorization' => 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjA2OWZlZGJiLTk2ZDctNGU4MC1iMDA0LWFmZDZjMmU4YmZkZiIsImxhc3RfcGFzc3dvcmRfY2hhbmdlIjoxNzUwNjYwODczLCJleHAiOjE3NTQ3NTcxMDR9.qAQF8XDOU8NRz5vSiFlQfnrj8dhGhJ5uvJqjblQWmr8', 'Cookie' => 'x-ap=eu-central-1; acw_tc=0a03e56c17521661095906021e3cacb270c127c80eb3a20489a465ab4beae1', ])->post('https://chat.qwen.ai/api/v2/chat/completions?chat_id=7ce2a60a-2b40-4ae8-8536-0cd346642de3', [ 'stream' => false, 'incremental_output' => true, 'chat_id' => '7ce2a60a-2b40-4ae8-8536-0cd346642de3', 'chat_mode' => 'normal', 'model' => 'qwen3-235b-a22b', 'messages' => [ [ 'role' => 'user', 'content' => 'یه جمله انگیزشی بده که خاص، کوبنده و غیرکلیشه‌ای باشه. نه مثل بقیه.', 'user_action' => 'chat', 'files' => [], 'timestamp' => 1752165316, 'models' => ['qwen3-235b-a22b'], 'chat_type' => 't2t', 'feature_config' => [ 'thinking_enabled' => false, 'output_schema' => 'phase' ], 'extra' => [ 'meta' => [ 'subChatType' => 't2t' ] ], 'sub_chat_type' => 't2t', 'parent_id' => 'df0a0c91-53d5-4a04-b5da-b8ac53d6d821' ] ], 'timestamp' => 1752165316 ]); // Get the response $responseData = $response->json(); $content = $responseData['data']['choices'][0]['message']['content']; $ai = new ai(); // Or use your correct namespace $ai->key = 'angizeh'; // Assuming you fixed 'kay' to 'key' in migration $ai->prompt = 'فقط یک جمله کوتاه انگیزشی بگو'; $ai->response = $content; $ai->save(); dd($ai); }); Route::get('/tasks', function () { // $client = new Client(); // // $response = $client->get('https://api.plane.so/api/v1/workspaces/montzar/projects/c1df4085-582f-4b57-b3c6-95b7d4d19007/issues/', [ // 'headers' => [ // 'X-API-Key' => 'plane_api_ec378e977ceb4bd1bbd2332855370645', // 'Accept' => 'application/json' // ], // 'query' => [ // "filters" => "%7B%22assignee_id__in%22:%227730f957-3448-4b8c-bc16-a87fc2f2e4ae%22%7D" // 'expand' => 'assignees' // 'assignees' => 'c6a7f605-3088-4400-86dc-7b0702f896a7' // ] // ]); // $data = json_decode($response->getBody(), true); //end of api //get users // $users = User::all(); //save in tasks table // foreach ($data['results'] as $a) // dd(gettype($a['assignees'])); // foreach ($data['results'] as $d) { // try { // $task = new Tasks(); // $task->task_id = $d['id']; // $task->name = $d['name']; // $task->description = $d['description'] ?? null; // $task->workspace_slug = "montzar"; // $task->assignees = json_encode($d['assignees']) ?? null; // $task->start_date = $d['start_date'] ?? null; // $task->target_date = $d['target_date'] ?? null; // $task->priority = $d['priority']; // $task->description_html = $d['description_html'] ?? null; // $task->completed_at = $d['completed_at'] ?? null; // $task->project = $d['project']; // $task->workspace = $d['workspace']; // $task->state = $d['state'] ?? null; // $task->json = json_encode($d); // $task->created_at = $d['created_at']; // $task->updated_at = $d['updated_at']; // $task->deleted_at = $d['deleted_at'] ?? null; // $task->created_by = $d['created_by']; // $task->updated_by = $d['updated_by']; // $task->deleted_by = $d['deleted_by'] ?? null; // $task->save(); // // فرض کردیم جدول واسط task_user باشه و ستون‌هاش task_id و user_id // $assigns = $d['assignees']; // foreach ($users as $user) { // if (in_array($user->plain_id, $assigns)) // DB::table('pivot_tasks')->insertOrIgnore([ // 'task_id' => $d['id'], // یا $task->task_id اگر این همون PK هست // 'user_id' => $user->plain_id // ]); // } // }catch (\Exception $e){ // dd($e); // } // } $user = User::where('user_name', $_COOKIE['user_identity'])->first(); $tasks = $user->tasks; return view('tasks.tasks')->with('tasks', $tasks); }); Route::any('/pplain', function (Request $request) { $d = $request->all(); // فقط وقتی تغییر state هست $msg = "Event: {$d['event']}\nAction: {$d['action']}\nName: {$d['data']['name']}\nNew Status: {$d['data']['state']['name']}"; // ارسال به تلگرام Http::get("https://api.wwwapp.ir/telegran_send.php", [ 'botToken' => "7467099619:AAF2V6yYcbAb8oSIRSCyH5i2GKfdWVO3a7k", 'chatId' => "-4742642674", 'message' => $msg, ]); // // ثبت در دیتابیس // DB::table('tst')->insert([ // 'data' => json_encode($d, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), // ]); return response()->json(['status' => 'ok'], 200); }); Route::get('attendance/login', function () { if (!empty($_COOKIE['user_identity'])) { $user = User::select('name', 'is_admin') ->where('user_name', $_COOKIE['user_identity']) ->first(); } else { $user = User::where('number', $_GET['phone']) ->where('password', $_GET['password']) ->orwhere('number', $_GET['phone']) ->where('email', $_GET['password']) ->first(); // dd($user); } if (!empty($user)) { setcookie('user_identity', $user->user_name ?? $user->id, time() + (60 * 60 * 24 * 365 * 5), "/"); $admin = $user->is_admin == 1 ? true : false; if ($admin) setcookie('ad', '1', time() + (60 * 60 * 24 * 365 * 5), "/"); return redirect(url(''))->with(['message', [ 'color' => '#00c300ff', "text" => 'ورود موفق'], 'admin' => $admin, ]); } return redirect(url(''))->with('message', [ 'color' => '#e60000ff', "text" => 'کاربر وجود ندارد، با پشتیبانی تماس بگیرید.' ]); }); Route::get('attendance/logMeOut', function () { foreach (request()->cookies as $name => $value) { Cookie::queue(Cookie::forget($name)); } session()->flush(); // setcookie('user_identity', "", time() - (86400 * 30000), "/"); // setcookie('ad', "", time() - (86400 * 30000), "/"); // setcookie('token-0', "", time() - (86400 * 30000), "/"); return redirect(url(''))->with('message', [ 'color' => '#00bfffff', "text" => 'با موفقیت خارج شدید.👋🏻' ]);; }); Route::post('attendance/enter', function (Request $request) { $user_identity = $_COOKIE['user_identity']; setcookie('user_identity', $user_identity, time() + (60 * 60 * 24 * 365 * 5), "/"); $userLat = $request->input('latitude'); $userLng = $request->input('longitude'); $officeLat = 32.6504751; $officeLng = 51.6936045; if (!$userLat || !$userLng) { return response()->json(['error' => 'مختصات دریافت نشد.'], 422); } $user = User::where('user_name', $user_identity)->select('name')->first(); $attendance = Attendance::where('user_identity', $user_identity) ->whereNull('exited_at') ->latest('entered_at') ->where('requested', null) ->first(); if ($attendance) { $break = AttendanceBreak::where('attendance_id', $attendance->id)->sum('duration'); $duration = $attendance->duration($attendance->created_at, $attendance->exited_at); if ($break) { $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); } // $hours = floor($durationSec / 3600); // $minutes = floor(($durationSec % 3600) / 60); // $seconds = $durationSec % 60; // $duration = sprintf("%02d:%02d:%02d", $hours, $minutes, $seconds); $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'); $attendance->duration = $duration; // $attendance->duration = Carbon::parse($attendance->entered_at)->diff(Carbon::parse($attendance->exited_at))->format('%H:%I:%S'); // dd($attendance); $attendance->save(); $status = 'attendance'; send_tel($user->name, $attendance, $status); return redirect()->back()->with('message', [ 'color' => '#3b82f6', 'text' => 'خروج با موفقیت ثبت شد.', ]); } else { $attendance = new Attendance(); $attendance->user_id = 0; $attendance->user_identity = $user_identity ?? ''; $attendance->distance = $request->input('distance'); $attendance->ip_address = $request->ip(); $attendance->entered_at = now(); $attendance->entry_location = ['lat' => $userLat, 'lng' => $userLng]; $attendance->office_location = ['lat' => $officeLat, 'lng' => $officeLng]; $attendance->save(); $status = 'attendance'; send_tel($user->name, $attendance, $status); return redirect()->back()->with('message', [ 'color' => '#22c55e', 'text' => 'ورود با موفقیت ثبت شد.', ]); } }); Route::post('attendance/break', function (Request $request) { // dd($request); $start_time = $request->start_time; $end_time = $request->end_time; $hours = floor($request->duration_seconds / 3600); $minutes = floor(($request->duration_seconds % 3600) / 60); $seconds = $request->duration_seconds % 60; $duration = sprintf("%02d:%02d:%02d", $hours, $minutes, $seconds); // dd($duration); $user = User::where('user_name', $_COOKIE['user_identity'])->select('name')->first(); $attendance = Attendance::where('user_identity', $_COOKIE['user_identity']) ->whereNull('exited_at')->latest('entered_at')->first(); $break = AttendanceBreak::where('attendance_id', $attendance->id)->wherenull('break_end')->first(); if (!$break) { $break = new AttendanceBreak(); } $break->attendance_id = $attendance->id; $break->break_start = $start_time; $break->break_end = $end_time ?? null; $break->duration = $duration ?? null; $break->save(); $status = 'break'; send_tel($user->name, $break, $status); return redirect()->back()->with('message', [ 'color' => '#00c300ff', 'text' => 'خسته نباشید ☺️' ]); // dd($start_time, $end_time, $duration, Carbon::now()); })->name('attendance.break'); Route::post('attendance/edit', function (Request $request) { // dd($request->all()); $userid = $request->input('uname'); // dd($userid); $id = $request->id; $newenter = $request->starttime; $newexit = $request->endtime; $date = $request->date; $user = User::where('user_name', $userid)->select('name')->first(); if ($id == "new") { $date = \Morilog\Jalali\CalendarUtils::convertNumbers($date, true); $date = \Morilog\Jalali\CalendarUtils::createCarbonFromFormat('Y-m-d', $date)->format('Y-m-d'); // dd($date); $req = [ 'function' => 'new', 'userid' => $userid, 'id' => $id, 'oldenter' => $newenter ? $date . ' ' . $newenter : '', 'newenter' => '', 'oldexit' => $newexit ? $date . ' ' . $newexit : '', 'newexit' => '', ]; // dd($req); Redis::connection()->set("att-tempreq:{$userid}:{$id}", json_encode($req)); $status = 'request'; $d = "ایجاد روز کاری"; send_tel($user->name, $d, $status); return redirect('/')->with('message', [ 'color' => '#00c300ff', "text" => 'درخواست شما به ادمین ارسال شد.' ]); } elseif (isset($id)) { $att = Attendance::find($id); // select('entered_at', 'exited_at','requested') $oldenter = $att->entered_at; $oldexit = $att->exited_at; $now = Carbon::now()->format('H:i'); // dd($oldenter,$newenter,$oldexit,$newexit,$now,$id); // $date = Jalalian::fromCarbon(Carbon::parse($request->entered_at))->format('Y/m/d'); if (($oldenter != $newenter || $oldexit != $newexit) && (!$newexit || $newexit > $newenter)) { $request = [ 'function' => 'edit', 'userid' => $userid, 'id' => $id, 'oldenter' => Carbon::parse($oldenter)->format('H:i'), 'newenter' => Carbon::parse($newenter)->format('H:i'), 'oldexit' => $oldexit, 'newexit' => $newexit, ]; Redis::connection()->set("att-tempreq:{$userid}:{$id}", json_encode($request)); $att->requested = 'true'; $att->save(); $status = 'request'; $d = "تغییر ساعت کاری"; send_tel($user->name, $d, $status); return redirect('/')->with('message', [ 'color' => '#00c300ff', "text" => 'درخواست شما به ادمین ارسال شد.' ]); } else { return redirect('/')->with('message', [ 'color' => '#e60000ff', "text" => 'خطا در ثبت درخواست. لطفا زمان را بررسی کنید.' ]); } } return redirect('/')->with('message', [ 'color' => '#e60000ff', "text" => 'لطفا اطلاعات ورودی را بررسی کنید.' ]); })->name('edit'); Route::post('attendance/delete', function (Request $request) { // dd($request); $id = $request->id; $attendance = Attendance::find($id); $user = User::where('user_name', $_COOKIE['user_identity'])->select('name')->first(); if ($attendance) { $request = [ 'function' => 'delete', 'userid' => $attendance->user_identity, 'id' => $id, 'oldenter' => Carbon::parse($attendance->entered_at)->format('H:i'), 'oldexit' => Carbon::parse($attendance->exited_at)->format('H:i'), 'newenter' => '', "newexit" => '' ]; Redis::connection()->set("att-tempreq:{$attendance->user_identity}:{$id}", json_encode($request)); $attendance->requested = 'true'; $attendance->save(); $status = 'request'; $d = "حذف روز کاری"; send_tel($user->name, $d, $status); return redirect()->back()->with('message', [ 'color' => '#6aff00ff', "text" => 'درخواست حذف با موفقیت ارسال شد.✔️' ]); } else { return redirect()->back()->with('message', [ 'color' => '#ff4400ff', "text" => 'خطا در ارسال درخواست✖️' ]); } })->name('user.delete'); Route::get('attendance/show', function (Request $request) { $username = $_COOKIE['user_identity']; $data = User::where('user_name', $username)->with('attendances')->first(); $data = $data->everymonth($data); // dd($data); return view('attendance.show', ['data' => $data]); })->name('attendance.show'); Route::get('/attendance/profile', function (Request $request) { if (!empty($_GET['username'])) { $username = $_GET['username']; } else { $username = $_COOKIE['user_identity']; } $data = User::where('user_name', $username)->first(); return view('attendance.profile', ['user' => $data]); })->name('user.profile'); Route::post('/attendance/profile', function (Request $request) { $username = $_COOKIE['user_identity']; $data = User::where('user_name', $username)->first(); if ($data->password != $request->password) { $request->validate([ 'password' => 'required|min:6|confirmed', ], [ 'password.required' => 'رمز عبور الزامی است.', 'password.min' => 'رمز عبور باید حداقل ۶ کاراکتر باشد.', 'password.confirmed' => 'تکرار رمز عبور مطابقت ندارد.', ]); } $data->name = $request->name; $data->email = $request->email; $data->number = $request->number; $data->password = $data->password != $request->password ? $request->password : $data->password; $data->chatid = $request->chatid; if (!empty($_COOKIE['ad'])) { $data->is_admin = $request->role == 1 ? 1 : null; } // dd($data); $data->save(); return redirect()->back()->with('message', [ 'color' => '#00c300ff', "text" => 'اطلاعات با موفقیت ویرایش شد.' ]); })->name('edit.profile');