149 lines
4.3 KiB
PHP
Executable File
149 lines
4.3 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Modules\Admin\app\Http\Controllers;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Traits\HasFilterRequest;
|
|
use App\Traits\HasOrderByRequest;
|
|
use App\Traits\HasSearchRequest;
|
|
use Illuminate\Http\Request;
|
|
use Modules\Admin\app\Models\Admin;
|
|
use Modules\Admin\app\Models\Tracking;
|
|
|
|
class TrackingController extends Controller
|
|
{
|
|
use HasOrderByRequest;
|
|
use HasFilterRequest;
|
|
use HasSearchRequest;
|
|
|
|
private $CHECK_IN = 'check in';
|
|
private $CHECK_OUT = 'check out';
|
|
|
|
public function __construct()
|
|
{
|
|
// Bỏ qua middleware 'checkApiToken' cho hàm 'myFunction'
|
|
$this->middleware('api')->except('create');
|
|
}
|
|
|
|
public function get(Request $request)
|
|
{
|
|
$tracking = new Tracking;
|
|
|
|
// Order by
|
|
$this->orderByRequest($tracking, $request);
|
|
|
|
// Filter
|
|
$this->filterRequest(
|
|
builder: $tracking,
|
|
request: $request,
|
|
filterKeys: [
|
|
'created_at' => self::F_IN_DATETIME,
|
|
'time_string' => self::F_TEXT,
|
|
'name' => self::F_TEXT,
|
|
'status' => self::F_TEXT
|
|
]
|
|
);
|
|
|
|
$this->searchRequest(
|
|
builder: $tracking,
|
|
value: $request->get('search'),
|
|
fields: [
|
|
'name',
|
|
'time_string',
|
|
'status'
|
|
]
|
|
);
|
|
|
|
$responseData = array_merge(
|
|
$tracking->paginate($request->get('per_page'))->toArray(),
|
|
['status' => true]
|
|
);
|
|
|
|
return response()->json($responseData);
|
|
}
|
|
|
|
public function create(Request $request)
|
|
{
|
|
try {
|
|
$validatedData = $request->validate([
|
|
'name' => 'required',
|
|
'time_string' => 'required',
|
|
'status' => 'required',
|
|
]);
|
|
|
|
$payload = $request->only(['name', 'time_string', 'status']);
|
|
$user = Admin::where('name', $payload['name'])->first();
|
|
if ($user) {
|
|
$payload['user_id'] = $user->id;
|
|
$latest = Tracking::where('name', $payload['name'])->latest()->first();
|
|
if($latest){
|
|
if($payload['status'] == $this->CHECK_IN || $payload['status'] == $this->CHECK_OUT){
|
|
if ($latest->status == $this->CHECK_IN) {
|
|
$payload['status'] = $this->CHECK_OUT;
|
|
}
|
|
if ($latest->status == $this->CHECK_OUT) {
|
|
$payload['status'] = $this->CHECK_IN;
|
|
}
|
|
$tracking = Tracking::create($payload);
|
|
return response()->json([
|
|
'data' => $tracking,
|
|
'check_status' => $payload['status'],
|
|
'status' => true
|
|
]);
|
|
}else{
|
|
return response()->json([
|
|
'data' => "STATUS INVALID",
|
|
'status' => false
|
|
]);
|
|
}
|
|
}else{
|
|
$tracking = Tracking::create($payload);
|
|
return response()->json([
|
|
'data' => $tracking,
|
|
'check_status' => $payload['status'],
|
|
'status' => true
|
|
]);
|
|
}
|
|
|
|
}
|
|
|
|
return response()->json([
|
|
'data' => "USER NOT EXIST",
|
|
'status' => false
|
|
]);
|
|
} catch (\Illuminate\Validation\ValidationException $e) {
|
|
return response()->json([
|
|
'data' => "IMPORT DATA FAIL",
|
|
'status' => false
|
|
], 422);
|
|
}
|
|
}
|
|
|
|
public function update(Request $request)
|
|
{
|
|
$id = $request->get('id');
|
|
|
|
$tracking = Tracking::find($id);
|
|
$payload = $request->all();
|
|
|
|
if ($tracking) {
|
|
$tracking->update($payload);
|
|
}
|
|
return response()->json([
|
|
'data' => $tracking,
|
|
'status' => true
|
|
]);
|
|
}
|
|
|
|
public function delete(Request $request)
|
|
{
|
|
$id = $request->get('id');
|
|
|
|
Tracking::destroy($id);
|
|
return response()->json([
|
|
'status' => true
|
|
]);
|
|
}
|
|
|
|
}
|