This commit is contained in:
mobin
2025-10-11 13:38:30 +00:00
parent 1c5d2c6f10
commit 2adb741dac
61 changed files with 3370 additions and 413 deletions
+374
View File
@@ -0,0 +1,374 @@
<?php
use Illuminate\Support\Facades\Route;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Response;
use App\Models\Attendance;
use App\Models\ai;
use App\Models\User;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Carbon;
use Morilog\Jalali\Jalalian;
use GuzzleHttp\Client;
use App\Models\Tasks;
function tel_notif($username, $status)
{
$message = "درخواست شما {$status} شد.";
$user = User::where('user_name', $username)->whereNotNull('chatid')->select('chatid', 'user_name')->first();
Http::get("https://api.wwwapp.ir/telegran_send.php", [
'botToken' => "7467099619:AAF2V6yYcbAb8oSIRSCyH5i2GKfdWVO3a7k",
'chatId' => $user->chatid,
'message' => $message,
]);
}
Route::get('/', function () {
$uname = $_COOKIE['user_identity'];
$u = User::select('name', 'is_admin')
->where('user_name', $uname)
->first();
if ($u->is_admin == '1') {
setcookie('ad', '1', time() + (60 * 60 * 24 * 365 * 5), "/");
$users = User::select('user_name', 'name')
->wherenotnull('user_name')
->with('attendances')
->get();
$records = [];
foreach ($users as $user) {
$rec = [
"user_name" => $user->user_name,
"name" => $user->name,
"attendances" => []
];
foreach ($user->attendances as $attendance) {
$key = "att-tempreq:{$user->user_name}:{$attendance->id}";
$get = json_decode(Redis::get("{$key}"));
if ($get)
if ($get->function != 'rejected')
$rec['attendances'][] = $get;
}
$key = "att-tempreq:{$user->user_name}:new";
$get = json_decode(Redis::get("{$key}"));
// dd($get);
if ($get) {
if ($get->function != 'rejected')
$rec['attendances'][] = $get;
}
$records[] = $rec;
}
// dd($users);
// dd(json_decode($json,true));
return view("admin..admin")->with(['message', [
'color' => '#ff8800ff',
"text" => 'شما به پنل ادمین وارد شدید✔️'
],
"users" => $users,
'reqs' => $records
]);
}
return redirect()->back()->with('message', [
'color' => '#ff8800ff',
"text" => 'شما دسترسی به این صفحه را ندارید!'
]);
})->name('admin.dashboard');
Route::get('/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']));
// dd('ridi');
$tasks = Tasks::all();
$i = 0;
foreach ($data['results'] as $d) {
if ($tasks->where('task_id', $d['id'])->first())
continue;
else {
$i++;
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
]);
}
echo $i;
} catch (\Exception $e) {
dd($e);
}
}
dd("Added {$i} new tasks.");
}
});
Route::get('/newuser', function () {
// dd('hello world');
return view('admin.new');
})->name('admin.new');
Route::post('/newuser', function (Request $request) {
// dd($request);
try {
$user = new User();
$user->name = $request->name;
$user->email = $request->email;
$user->user_name = $request->username;
$user->chatid = $request->chatid;
$user->number = $request->number;
$user->save();
return redirect(route('admin.dashboard'))->with('message', [
'color' => '#009900ff',
'text' => 'کاربر با موفقیت ایجاد شد✔️'
]);
} catch (\Exception $exception) {
return redirect(route('admin.dashboard'))->with('message', [
'color' => '#ff9900ff',
'text' => 'مقادیر وارد شده تکراری یا اشتباه است✖️'
]);
}
})->name('admin.new');
Route::post('/edit', function (Request $request) {
// dd($request);
$id = $request->id;
$nstartt = $request->starttime;
$nendt = $request->endtime;
// dd($request);
if ($id == 'new') {
$user_name = $request->uname;
$date = \Morilog\Jalali\CalendarUtils::convertNumbers($request->date, true);
$date = \Morilog\Jalali\CalendarUtils::createCarbonFromFormat('Y-m-d', $date)->format('Y-m-d');
// dd($date);
if ($nendt > $nstartt) {
$attendance = new Attendance();
$attendance->ip_address = 'admin-manual';
$attendance->user_identity = $user_name;
$attendance->entered_at = $nstartt ? $date . ' ' . $nstartt : null;
$attendance->exited_at = $nendt ? $date . ' ' . $nendt : null;
$attendance->duration = $attendance->duration($nstartt, $nendt);
$attendance->save();
return redirect()->back()->with('message', [
'color' => '#6aff00ff',
"text" => 'تغییرات با موفقیت ذخیره شد.✔️'
]);
} else {
return redirect()->back()->with('message', [
'color' => '#ff4400ff',
"text" => 'مقادیر اشتباه وارد شده است✖️'
]);
}
} else {
$attendance = Attendance::find($id);
$date = Carbon::parse($attendance->entered_at ?? $attendance->exited_at)->format('Y-m-d');
$ostartt = Carbon::parse($attendance->entered_at)->format('H:i');
$oendt = Carbon::parse($attendance->exited_at)->format('H:i');
if (($ostartt != $nstartt || $oendt != $nendt) && $nendt > $nstartt) {
$attendance->entered_at = $date . ' ' . $nstartt;
$attendance->exited_at = $nendt ? $date . ' ' . $nendt : null;
$attendance->duration = $nendt ? $attendance->duration($nstartt, $nendt) : null;
$attendance->save();
return redirect()->back()->with('message', [
'color' => '#6aff00ff',
"text" => 'تغییرات با موفقیت ذخیره شد.✔️'
]);
} else {
return redirect()->back()->with('message', [
'color' => '#ff4400ff',
"text" => 'مقادیر اشتباه وارد شده است✖️'
]);
}
}
})->name('admin.edit');
Route::post('/delete', function (Request $request) {
// dd($request);
$id = $request->id;
$attendance = Attendance::find($id);
if ($attendance) {
$attendance->delete();
return redirect()->back()->with('message', [
'color' => '#6aff00ff',
"text" => 'حذف با موفقیت انجام شد.✔️'
]);
} else {
return redirect()->back()->with('message', [
'color' => '#ff4400ff',
"text" => 'خطا در حذف رکورد✖️'
]);
}
})->name('admin.delete');
Route::post('/update', function (Request $request) {
// dd($request);
$data = json_decode($request->data);
if ($request->update == 'approve') {
if ($data->function == 'delete') {
$st = Attendance::find($data->id);
if ($st) {
$st->delete();
if ($st) {
tel_notif($st->user_identity, "تایید");
Redis::connection()->del("att-tempreq:{$data->userid}:{$data->id}");
return redirect()->back()->with('message', [
'color' => '#6aff00ff',
'text' => 'رکورد با موفقیت حذف شد✔️'
]);
} else {
return redirect()->back()->with('message', [
'color' => '#ff8800ff',
'text' => 'حذف رکورد با شکست مواجه شد✖️️'
]);
}
} else {
return redirect()->back()->with('message', [
'color' => '#ff8800ff',
'text' => 'رکورد پیدا نشد✖️'
]);
}
} elseif ($data->function == 'edit') {
$record = Attendance::find($data->id);
$attendance = new Attendance();
$date = Carbon::parse($record->entered_at)->format('Y-m-d');
$record->ip_address = 'admin-edited';
$record->user_identity = $data->userid;
$record->entered_at = $data->newenter ? $date . ' ' . $data->newenter : null;
if ($data->newexit != null) {
$record->exited_at = $date . ' ' . ($data->newexit > '16:00:00' ? "16:00:00" : $data->newexit);
$record->duration = $attendance->duration(($data->newexit > '16:00:00' ? "16:00:00" : $data->newexit), $data->newexit);
} else {
$record->exited_at = null;
$record->duration = null;
}
$record->requested = '';
$record->save();
Redis::connection()->del("att-tempreq:{$data->userid}:{$data->id}");
tel_notif($record->user_identity, "تایید");
return redirect()->back()->with('message', [
'color' => '#6aff00ff',
"text" => 'رکورد با موفقیت ذخیره شد.✔️'
]);
} elseif ($data->function == 'new') {
// dd($data);
$starttime = $data->oldenter ? Carbon::parse($data->oldenter)->format('H:i:s') : null;
$endtime = $data->oldexit ? Carbon::parse($data->oldexit)->format('H:i:s') : null;
if (is_null($endtime) || $endtime > $starttime) {
$attendance = new Attendance();
$attendance->ip_address = 'admin-new';
$attendance->user_identity = $data->userid;
$attendance->entered_at = $data->oldenter ?: null;
$attendance->exited_at = $data->oldexit ?: null;
$attendance->duration = $data->oldexit ? $attendance->duration($data->oldenter, $data->oldexit) : null;
$attendance->save();
Redis::connection()->del("att-tempreq:{$data->userid}:{$data->id}");
tel_notif($data->userid, "تایید");
return redirect()->back()->with('message', [
'color' => '#6aff00ff',
"text" => 'درخواست با موفقیت تایید شد.✔️'
]);
}
}
}
if ($request->update == 'reject') {
Redis::connection()->del("att-tempreq:{$data->userid}:{$data->id}");
// dd($data->id);
$att = Attendance::find($data->id);
// dd($att);
$att->requested = null;
$att->save();
tel_notif($att->user_identity, "رد");
return redirect()->back()->with('message', [
'color' => '#6aff00ff',
"text" => 'درخواست با موفقیت رد شد.✔️'
]);
}
})->name('admin.update');
Route::get('/{user_name}', function ($user_name) {
// dd($user_name);
// $user = User::select('user_name', 'name', 'picture')
// ->where('user_name', $user_name)
// ->with('attendances')
// ->first();
setcookie('token-0', $_COOKIE['user_identity'], time() + (60 * 60 * 24 * 365), "/");
setcookie('user_identity', $user_name, time() + (60 * 60 * 24 * 365), "/");
// $_COOKIE['user_identity'] = $user_name;
return redirect(url('/'));
})->name('admin.user');
Executable
+230
View File
@@ -0,0 +1,230 @@
<?php
use Illuminate\Support\Facades\Route;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\DB;
use App\Models\Attendance;
use App\Models\ai;
use App\Models\User;
use Illuminate\Support\Facades\Http;
use \Carbon\Carbon;
use Morilog\Jalali\Jalalian;
use function PHPUnit\Framework\returnSelf;
Route::get('/', function () {
return view('attendance.index');
return view('welcome');
});
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::post('attendance/enter', function (Request $request) {
// return $request;
// 32.6504751, 51.6936045
$user_identity = $request->input('name');
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);
}
$attendance = Attendance::where('user_identity', $user_identity)
->whereNull('exited_at')
->latest('entered_at')
->first();
if ($attendance) {
$attendance->exited_at = now();
$attendance->exit_location = ['lat' => $userLat, 'lng' => $userLng];
$attendance->ip_exit = $userLng;
$attendance->distance_exit = $request->input('distance');
$attendance->save();
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();
return redirect()->back()->with('message', [
'color' => '#22c55e',
'text' => 'ورود با موفقیت ثبت شد.',
]);
}
});
Route::post('/pplain', function (Request $request) {
//functions
function savedb($d)
{
DB::table('tst')->insert([
'data' => json_encode($d),
]);
}
function sendbot($chatid, $mssg)
{
// ارسال به پیوی تلگرام
$sent = Http::get("https://api.wwwapp.ir/telegran_send.php", [
'botToken' => "7467099619:AAF2V6yYcbAb8oSIRSCyH5i2GKfdWVO3a7k",
'chatId' => $chatid,
'message' => $mssg,
'parse_mode' => 'Markdown'
]);
}
$data = $request->all();
savedb($data);
$message = "";
$aclist = [
'updated' => '🔄',
'created' => '🆕',
// 'urgent'=>'🟥',
// 'high'=>'🟧',
// 'medium'=>'🟨',
// 'low'=>'🟩',
// 'none'=>'⚪'
];
//create message
if ($data['event'] == 'project') {
$prjlead = $data['data']['project_lead'] ?? "";
$action = $data['action'] ?? "";
if ($prjlead != "" && $action != "") {
$desc = "\nتوضیحات:\nعملیات ({$action}) توسط کاربر ({$prjlead}) انجام شده است.";
}
!empty($data['action']) && $message .= "{$aclist[$data['action']]}\n";
!empty($data['data']['name']) && $message .= "{$data['data']['name']} ";
if (!$data['data']['priority'] == 'none')
!empty($data['data']['priority']) && $message .= "({$data['data']['priority']})";
!empty($desc) && $message .= $desc;
!empty($data['data']['updated_at']) && $message .= "\n" . Jalalian::fromCarbon(Carbon::parse($data['data']['updated_at']))->format('Y/m/d')
. "\n";
!empty($data['description_text']) && $message .= "\n{$data['description_text']}";
} elseif ($data['event'] == 'issue') {
if (isset($data['activity'])) {
$field = $data['activity']['field'] ?? "نامشخص";
$actor = $data['activity']['actor']['last_name'] ?? "نامشخص";
$oldvalue = $data['activity']['old_value'] ?? "نامشخص";
$newvalue = $data['activity']['new_value'] ?? "نامشخص";
if(( $field=='start_date' || $field == 'target_date' ) && $field != 'نامشخص'){
if(strtotime($field)!= 'false'){
$oldvalue = Jalalian::fromCarbon(Carbon::parse($oldvalue))->format('Y/m/d');
$newvalue = Jalalian::fromCarbon(Carbon::parse($newvalue))->format('Y/m/d');
}
}
if ($field == 'sort_order' || $field == 'state_id') {
return;
}
$desc = "کاربر ({$actor}) مقدار ({$field}) را از ({$oldvalue}) به ({$newvalue}) تغییر داد.";
} else {
$desc = "وظیفه در سایت چک شود.";
}
!empty($data['data']['start_date']) && $startdate = Jalalian::fromCarbon(Carbon::parse($data['data']['start_date']))->format('Y/m/d');
!empty($data['data']['target_date']) && $enddate = Jalalian::fromCarbon(Carbon::parse($data['data']['target_date']))->format('Y/m/d');
!empty($data['action']) && $message .= "{$aclist[$data['action']]}";
!empty($data['data']['name']) && $message .= "{$data['data']['name']} ";
if ($data['data']['priority'] != "none") {
$message .= "({$data['data']['priority']})";
}
$message .= "\n" . $desc;
!empty($data['data']['assignees']) && $message .= "\n" . implode(', ', array_column($data['data']['assignees'], 'last_name')) . "\n";
if (!empty($startdate) && !empty($enddate)) {
$message .= "{$startdate} ➡️ {$enddate}";
} elseif (!empty($startdate)) {
$message .= "تاریخ شروع مهلت پروژه: {$startdate}";
} elseif (!empty($enddate)) {
$message .= "تاریخ اتمام مهلت پروژه: {$enddate}";
}
// !empty($data['data']['target_date']) && $message .= "تاریخ اتمام مهلت پروژه: ".Jalalian::fromCarbon(Carbon::parse($data['data']['target_date']))->format('Y/m/d') ."\n";
}
$assignees = array_column($data['data']['assignees'], 'email');
$members = User::select('email', 'chatid')->get();
$gpid = -4742642674;
if (empty($assignees)) {
sendbot($gpid, $message);
} else {
sendbot($gpid, $message);
foreach ($assignees as $item) {
foreach ($members as $member) {
if ($member->email == $item) {
//sent message
sendbot($member->chatid, $message);
}
}
}
}
return response()->json(['status' => 'ok'], 200);
});
Regular → Executable
View File
Regular → Executable
+449 -9
View File
@@ -1,19 +1,99 @@
<?php
use Illuminate\Console\View\Components\Task;
use Illuminate\Support\Facades\Route;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Response;
use App\Models\Attendance;
use App\Models\ai;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Carbon;
use Morilog\Jalali\Jalalian;
use App\Models\User;
use Illuminate\Support\Facades\DB;
use Morilog\Jalali\CalendarUtils;
use App\Models\AttendanceBreak;
use GuzzleHttp\Client;
use App\Models\Tasks;
function send_tel($user, $data, $status)
{
if ($status == 'attendance') {
// dd('hi');
$enter = Carbon::parse($data->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 () {
return view('attendance.index');
return view('welcome');
// 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([
@@ -49,7 +129,7 @@ Route::get('/ai', function () {
],
'timestamp' => 1752165316
]);
// Get the response
// Get the response
$responseData = $response->json();
$content = $responseData['data']['choices'][0]['message']['content'];
$ai = new ai(); // Or use your correct namespace
@@ -59,13 +139,156 @@ Route::get('/ai', function () {
$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) {
// return $request;
// 32.6504751, 51.6936045
$user_identity = $request->input('name');
$user_identity = $_COOKIE['user_identity'];
setcookie('user_identity', $user_identity, time() + (60 * 60 * 24 * 365 * 5), "/");
$userLat = $request->input('latitude');
$userLng = $request->input('longitude');
@@ -75,22 +298,43 @@ Route::post('attendance/enter', function (Request $request) {
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) {
$attendance->exited_at = now();
$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{
} else {
$attendance = new Attendance();
$attendance->user_id = 0;
$attendance->user_identity = $user_identity ?? '';
@@ -100,6 +344,8 @@ Route::post('attendance/enter', function (Request $request) {
$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',
@@ -107,3 +353,197 @@ Route::post('attendance/enter', function (Request $request) {
]);
}
});
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');