378 lines
15 KiB
PHP
378 lines
15 KiB
PHP
<?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;
|
||
$record->duration = $attendance->duration($data->newenter, $data->newexit);
|
||
|
||
} else {
|
||
$record->exited_at = null;
|
||
$record->duration = null;
|
||
}
|
||
$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 json_encode($data);
|
||
// 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,
|
||
]);
|
||
}
|
||
|
||
}
|