diff --git a/BACKEND/Modules/Admin/app/Http/Controllers/TrackingController.php b/BACKEND/Modules/Admin/app/Http/Controllers/TrackingController.php index 31a10dd..297894c 100755 --- a/BACKEND/Modules/Admin/app/Http/Controllers/TrackingController.php +++ b/BACKEND/Modules/Admin/app/Http/Controllers/TrackingController.php @@ -7,6 +7,7 @@ use App\Traits\HasFilterRequest; use App\Traits\HasOrderByRequest; use App\Traits\HasSearchRequest; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Storage; use Modules\Admin\app\Models\Admin; use Modules\Admin\app\Models\Tracking; @@ -73,7 +74,6 @@ class TrackingController extends Controller 'time_string' => 'required', 'status' => 'required', ]); - $payload = $request->only(['name', 'time_string', 'status']); if($request->has('created_at')){ $payload['created_at'] = $request->created_at; @@ -141,6 +141,38 @@ class TrackingController extends Controller ]); } + public function saveImage(Request $request) + { + $id = $request->get('id'); + + $tracking = Tracking::find($id); + // $id = $request->get('id'); + + // $tracking = Tracking::find($id); + // $payload = $request->all(); + + // if ($tracking) { + // $tracking->update($payload); + // } + if ($request->hasFile('image')) { + $file = $request->file('image'); + $filename = $request->file_name; + $path = 'screenshot' . "/$filename"; + + Storage::disk('public')->put( + path: $path, + contents: $file->get() + ); + $tracking->image = $path; + + $tracking->save(); + } + return response()->json([ + 'data' => $tracking, + 'status' => true + ]); + } + public function delete(Request $request) { $id = $request->get('id'); diff --git a/BACKEND/Modules/Admin/routes/api.php b/BACKEND/Modules/Admin/routes/api.php index 9369f6c..b9fe679 100755 --- a/BACKEND/Modules/Admin/routes/api.php +++ b/BACKEND/Modules/Admin/routes/api.php @@ -123,6 +123,7 @@ Route::middleware('api') ], function () { Route::get('/', [TrackingController::class, 'get']); Route::post('/scan-create', [TrackingController::class, 'create']); + Route::post('/send-image', [TrackingController::class, 'saveImage']); // Route::get('/clear-cache', [SettingController::class, 'clearCache']); }); diff --git a/BACKEND/database/migrations/2024_06_07_040229_add_image_column_to_tracking_table.php b/BACKEND/database/migrations/2024_06_07_040229_add_image_column_to_tracking_table.php new file mode 100644 index 0000000..00f2ea5 --- /dev/null +++ b/BACKEND/database/migrations/2024_06_07_040229_add_image_column_to_tracking_table.php @@ -0,0 +1,30 @@ +string('image', 255)->default(null); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('tracking', function (Blueprint $table) { + // + $table->dropColumn('image'); + }); + } +}; diff --git a/FRONTEND/src/pages/Timekeeping/Timekeeping.tsx b/FRONTEND/src/pages/Timekeeping/Timekeeping.tsx index ce146ee..882d050 100644 --- a/FRONTEND/src/pages/Timekeeping/Timekeeping.tsx +++ b/FRONTEND/src/pages/Timekeeping/Timekeeping.tsx @@ -1,6 +1,6 @@ import { getTheTimesheet } from '@/api/Admin' import { get } from '@/rtk/helpers/apiService' -import { Box, Select, Table, Text, Tooltip } from '@mantine/core' +import { Box, Image, Select, Table, Text, Tooltip } from '@mantine/core' import { IconCheck, IconX } from '@tabler/icons-react' import { useEffect, useState } from 'react' import classes from './Timekeeping.module.css' @@ -22,6 +22,7 @@ interface HistoryValue { user_id: number status: string time_string: string + image: string created_at: string updated_at: string } @@ -162,6 +163,7 @@ const Timekeeping = () => { {total / 60 / 60 < 8 && total !== 0 ? ( {`Total: ${(total / 60 / 60).toFixed(1)}h`} @@ -169,7 +171,7 @@ const Timekeeping = () => { .find((h) => h.day === d) ?.values.map((v) => { return ( -

{v.status + ': ' + v.time_string}

+

{v.status + ': ' + v.time_string}

{v.image&&}
) })}