1
0

update material index

This commit is contained in:
Wian Drs
2026-07-02 23:34:17 +07:00
parent af1c98b38b
commit b0f3f03b73
3 changed files with 83 additions and 8 deletions
@@ -8,6 +8,7 @@ use App\Http\Requests\Material\TransferMaterialRequest;
use App\Http\Requests\Material\ReturnMaterialRequest;
use App\Http\Resources\Material\MaterialResource;
use App\Services\Material\MaterialService;
use Illuminate\Http\Request;
class MaterialController extends ApiController
{
@@ -18,6 +19,27 @@ class MaterialController extends ApiController
$this->service = $service;
}
public function index(Request $request)
{
$filters = $request->only([
'search',
'technician_id',
'warehouse_id',
'type',
'page',
'per_page',
'sort_by',
'sort_order',
]);
$data = $this->service->list($filters);
return $this->success(
MaterialResource::collection($data),
'List material user berhasil diambil'
);
}
public function assign(AssignMaterialRequest $request)
{
$result = $this->service->assign($request->validated());
+54
View File
@@ -10,6 +10,60 @@ use DB;
class MaterialService
{
public function list(array $filters = [])
{
$serialized = TechnicianMaterial::query()
->select([
'id',
'user_id',
'barcode_id',
'inventory_item_id',
'material_name',
'serial_number',
'status',
'assigned_at',
'assigned_by',
'created_at',
'updated_at',
DB::raw('NULL as unit'),
DB::raw('NULL as qty_received'),
DB::raw('NULL as qty_used'),
DB::raw('NULL as qty_remaining'),
DB::raw("'serialized' as type"),
]);
$consumable = TechnicianConsumable::query()
->select([
'id',
'user_id',
'barcode_id',
'inventory_item_id',
'material_name',
DB::raw('NULL as serial_number'),
'status',
'assigned_at',
'assigned_by',
'created_at',
'updated_at',
'unit',
'qty_received',
'qty_used',
'qty_remaining',
DB::raw("'consumable' as type"),
]);
if (!empty($filters['user_id'])) {
$serialized->where('user_id', $filters['user_id']);
$consumable->where('user_id', $filters['user_id']);
}
$query = $serialized->unionAll($consumable);
return DB::query()
->fromSub($query, 'materials')
->orderByDesc('created_at')
->paginate($filters['per_page'] ?? 15);
}
/*
|--------------------------------------------------------------------------
| ASSIGN MATERIAL (AUTO DETECT TYPE)
+7 -8
View File
@@ -60,15 +60,14 @@ Route::middleware('auth:sanctum')->group(function () {
Route::post('/escalate', 'escalate');
});
Route::prefix('materials')->group(function () {
Route::post('/assign', [MaterialController::class, 'assign']);
Route::post('/transfer', [MaterialController::class, 'transfer']);
Route::post('/return', [MaterialController::class, 'return']);
Route::get('/user/{user_id}', [MaterialController::class, 'listByUser']);
Route::get('/history/{barcode_id}', [MaterialController::class, 'history']);
Route::controller(MaterialController::class)->group(function () {
Route::get('/', 'index');
Route::post('/assign', 'assign');
Route::post('/transfer', 'transfer');
Route::post('/return', 'return');
Route::get('/user/{user_id}', 'listByUser');
Route::get('/history/{barcode_id}', 'history');
});
Route::prefix('audit-logs')