375 lines
14 KiB
PHP
375 lines
14 KiB
PHP
<?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');
|