ManagementSystem/BACKEND/Modules/Admin/app/Http/Controllers/TimekeepingController.php

105 lines
4.7 KiB
PHP

<?php
namespace Modules\Admin\app\Http\Controllers;
use App\Helper\Cache\CurrentMonthTimekeeping;
use App\Http\Controllers\Controller;
use App\Traits\AnalyzeData;
use App\Traits\HasFilterRequest;
use App\Traits\HasOrderByRequest;
use App\Traits\HasSearchRequest;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Modules\Admin\app\Models\Admin;
use Modules\Admin\app\Models\MonthlyTimekeeping;
use Modules\Admin\app\Models\Tracking;
use function PHPSTORM_META\type;
class TimekeepingController extends Controller
{
use HasOrderByRequest;
use HasFilterRequest;
use HasSearchRequest;
use AnalyzeData;
public function get(Request $request)
{
$currentDate = Carbon::now();
$currentMonth = $currentDate->month;
$currentYear = $currentDate->year;
$data = MonthlyTimekeeping::where('month', '=', $request->month)->where('year', '=', $request->year)->first();
if ($currentMonth == (int)$request->month && $currentYear == (int)$request->year) {
$cacheData = CurrentMonthTimekeeping::getCacheCurrentMonthTimekeeping();
if ($cacheData) {
$cacheData->data = json_decode($cacheData->data, true);
return response()->json(['status' => true, 'data' => $cacheData->data, 'working_days'=> $cacheData->working_days, 'message' => 'Get from cache']);
} else {
$result = $this->analyzeCurrentMonthTimeKeepingData($currentMonth, $currentYear);
if ($data) {
$data->update(['data' => json_encode($result)]);
return response()->json(['status' => true, 'data' => $result, 'message' => 'Get from analyzeCurrentMonthTimeKeepingData + update record']);
}
MonthlyTimekeeping::create(['month' => $currentMonth, 'year' => $currentYear, 'working_days' => $currentDate->daysInMonth, 'data' => json_encode($result)]);
return response()->json(['status' => true, 'data' => $result, 'message' => 'Get from analyzeCurrentMonthTimeKeepingData + create record']);
}
} else {
if ($data) {
$data['data'] = json_decode($data['data']);
return response()->json(['status' => true, 'data' => $data['data'], 'working_days'=> $data['working_days'], 'message' => 'Get from DB']);
} else {
$result = $this->analyzeCurrentMonthTimeKeepingData($request->month, $request->year);
MonthlyTimekeeping::create(['month' => $request->month, 'year' => $request->year, 'working_days' => Carbon::create((int)$request->year, (int)$request->month)->daysInMonth, 'data' => json_encode($result)]);
return response()->json(['status' => true, 'data' => $result, 'message' => 'Get from analyzeCurrentMonthTimeKeepingData']);
}
}
return response()->json(['status' => false, 'mewssage' => 'Get data failed!']);
}
public function addWorkingTimeForMultipleUser(Request $request)
{
$user_ids = $request->users;
$year = $request->year;
$month = $request->month;
$day = $request->day;
$type = $request->type;
foreach ($user_ids as $id) {
$user = Admin::find($id);
$date = Carbon::create($year, $month, $day)->setTimezone(env('TIME_ZONE'));
$start = $date->copy()->setTime(7, 31, 11);
$end = $type == 'half' ? $date->copy()->setTime(11, 31, 11) : $date->copy()->setTime(17, 1, 11);
Tracking::insert([
[
'name' => $user->name,
'user_id' => $user->id,
'status' => 'check in',
'time_string' => $start->format('Y-m-d H:i:s'),
'created_at' => $start->setTimezone('UTC')
],
[
'name' => $user->name,
'user_id' => $user->id,
'status' => 'check out',
'time_string' => $end->format('Y-m-d H:i:s'),
'created_at' => $end->setTimezone('UTC')
]
]);
}
return response()->json(['status' => true, 'message' => 'Add successfully']);
}
public function saveWorkingDays(Request $request)
{
$data = MonthlyTimekeeping::where('month', '=', $request->month)->where('year', '=', $request->year)->first();
if($data){
$data->update(['working_days'=>$request->working_days]);
$this->createOrUpdateRecordForCurrentMonth($request->month, $request->year);
return response()->json(['status' => true, 'message' => 'Update successful']);
}
return response()->json(['status' => false, 'message' => 'Update failed']);
}
}