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

177 lines
5.1 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 Illuminate\Http\Response;
use Modules\Admin\app\Http\Requests\DiscountRequest;
use Modules\Admin\app\Models\Admin;
use Modules\Admin\app\Models\Discount;
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($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
]);
}
}
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(DiscountRequest $request)
{
$id = $request->get('id');
$discount = Discount::find($id);
$payload = $request->all();
if ($discount) {
$discount->update($payload);
}
return response()->json([
'data' => $discount,
'status' => true
]);
}
public function delete(DiscountRequest $request)
{
$id = $request->get('id');
Discount::destroy($id);
return response()->json([
'status' => true
]);
}
// Delete multiple discounts
public function deletes(DiscountRequest $request)
{
$discounts = $request->get('discounts');
$ids = collect($discounts)->pluck('id');
Discount::whereIn('id', $ids)->delete();
return response()->json([
'data' => $ids,
'status' => true
]);
}
// Update multiple discounts
public function updates(DiscountRequest $request)
{
$discounts = $request->get('discounts');
$ids = collect($discounts)->pluck('id');
foreach ($discounts as $discountRequest) {
// convert to object|array to array
$discountRequest = collect($discountRequest)->toArray();
// handle array
$discount = Discount::find($discountRequest['id']);
if ($discount) {
// exclude id field
unset($discount['id']);
$discount->update($discountRequest);
}
}
return response()->json([
'data' => Discount::whereIn('id', $ids)->get(),
'status' => true
]);
}
}