Files
a.montask/app/Http/Controllers/AdminController.php
T
2026-04-25 11:46:02 +00:00

390 lines
15 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Facades\Redis;
use Illuminate\Console\View\Components\Task;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Response;
use App\Models\Attendance;
use \App\Models\AttendanceBreak;
use App\Models\ai;
use Illuminate\Support\Facades\Http;
use Morilog\Jalali\Jalalian;
use GuzzleHttp\Client;
use App\Models\Tasks;
use App\Models\Pivot_Tasks;
class AdminController extends Controller
{
public function dashboard()
{
if (isset($_COOKIE['token-0'])) {
$uname = $_COOKIE['token-0'];
setcookie("user_identity", $_COOKIE['token-0'], time() + (60 * 60 * 24 * 365), '/');
Cookie::queue(Cookie::forget('token-0'));
} else
$uname = $_COOKIE['user_identity'];
$u = User::select('name', 'is_admin')
->where('user_name', $uname)
->first();
if ($u->is_admin == 1) {
$provider = 'admin';
} elseif ($u->is_admin == 2) {
$provider = 'supervisor';
}
if ($u->is_admin == '1' || $u->is_admin == '2') {
setcookie('ad', '1', time() + (60 * 60 * 24 * 365 * 5), "/");
$users = User::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}"));
$date = $attendance->entered_at ? Carbon::parse($attendance->entered_at)->format('Y-m-d') : null;
if ($get)
if ($get->function != 'rejected')
$rec['attendances'][] = $get;
}
// $key = "att-tempreq:{$user->user_name}:new";
$create_requests_key = "att-tempreq:creates:{$user->user_name}";
$create_requests = Redis::connection()->lrange($create_requests_key, 0, -1); // خواندن تمام آیتم های لیست
foreach ($create_requests as $req_json) {
$get = json_decode($req_json);
if ($get && $get->function != 'rejected') {
$rec['attendances'][] = $get;
}
}
// $get = json_decode(Redis::get("{$key}"));
// if ($get) {
//// dd($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,
"userType" => $provider
]);
}
return redirect()->back()->with('message', [
'color' => '#ff8800ff',
"text" => 'شما دسترسی به این صفحه را ندارید!'
]);
}
public function newUser()
{
// dd('hello world');
return view('admin.new');
}
public function addUser(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' => 'مقادیر وارد شده تکراری یا اشتباه است✖️'
]);
}
}
public function edit(Request $request)
{
// dd($request);
$allData = array_merge($request->all(), $request->query());
$converted = $this->fa2en_numbers($allData);
$request->merge($converted);
$id = $request->id;
$nstartt = $request->starttime;
$nendt = $request->endtime;
// dd($request);
$user = User::where('user_name', $_COOKIE['user_identity'])->first();
if ($user->is_admin == 2) {
$attController = new AttendanceController();
return $attController->edit($request);
}
if ($id == 'new') {
$user_name = $request->uname;
if ($request->display_date == null) {
$date = Carbon::now()->format('Y-m-d');
} else {
// dump($date);
$date = \Morilog\Jalali\CalendarUtils::convertNumbers($request->display_date, true);
$date = str_replace('/', '-', $date);
// dump($date);
$date = Jalalian::fromFormat('Y-m-d', $date)->toCarbon()->format('Y-m-d');
// $date = \Morilog\Jalali\CalendarUtils::createCarbonFromFormat('Y-m-d', $date)->format('Y-m-d');
}
if (($nendt > $nstartt) || ($nendt === null && $nstartt !== null)) {
$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 = $nendt !== null ? $attendance->duration($nstartt, $nendt) : null;
$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 != null ? $nendt > $nstartt : true)) {
$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" => 'مقادیر اشتباه وارد شده است✖️'
]);
}
}
}
public function delete(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" => 'خطا در حذف رکورد✖️'
]);
}
}
public function update(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, "تایید");
// $create_requests_key = "att-tempreq:creates:{$data->userid}";
// Redis::connection()->lrem($create_requests_key, 1, json_encode($data));
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') {
// dd($data);
$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) {
//جریمه
// if($data->newexit > '16:00:00'){
// $data->newexit = date('H:i:s', strtotime($data->newexit . ' -1 hour'));
// }
$record->exited_at = $date . ' ' . $data->newexit;
$duration = $attendance->duration($data->newenter, $data->newexit);
} else {
$record->exited_at = null;
$record->duration = null;
}
$break = AttendanceBreak::where('attendance_id', $data->id)->sum('duration');
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);
}
$record->duration = $duration ?? $record->duration;
//dd($record->duration, $duration, $break);
$record->requested = '';
$record->save();
// $create_requests_key = "att-tempreq:creates:{$data->userid}";
// $create_requests_key = "att-tempreq:{$data->userid}:{$data->id}";
// $t = Redis::connection()->lrem($create_requests_key, -1, json_encode($data));
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();
$create_requests_key = "att-tempreq:creates:{$data->userid}";
Redis::connection()->lrem($create_requests_key, 1, json_encode($data));
// 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') {
if ($data->function == 'delete' || $data->function == 'edit') {
Redis::connection()->del("att-tempreq:{$data->userid}:{$data->id}");
} elseif ($data->function == 'new') {
$create_requests_key = "att-tempreq:creates:{$data->userid}";
Redis::connection()->lrem($create_requests_key, 1, json_encode($data));
}
// dd($data->id);
if ($data->id !== "new") {
$att = Attendance::find($data->id);
// dd($att);
$att->requested = null;
$att->save();
}
tel_notif($data->userid, "رد");
return redirect()->back()->with('message', [
'color' => '#6aff00ff',
"text" => 'درخواست با موفقیت رد شد.✔️'
]);
}
}
// private function fa2en_numbers($input)
// {
// if (is_string($input)) {
// $fa_numbers = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
// $en_numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
// return str_replace($fa_numbers, $en_numbers, $input);
// } elseif (is_array($input)) {
// return array_map([$this, __FUNCTION__], $input);
// } else {
// return $input;
// }
// }
}
function tel_notif($username, $status)
{
$message = "درخواست شما {$status} شد.";
$user = User::where('user_name', $username)->whereNotNull('chatid')->select('chatid', 'user_name')->first();
if ($user) {
Http::get("https://api.wwwapp.ir/telegran_send.php", [
'botToken' => "7467099619:AAF2V6yYcbAb8oSIRSCyH5i2GKfdWVO3a7k",
'chatId' => $user->chatid,
'message' => $message,
]);
}
}