pdv.backend/app/Http/Controllers/App/UnitOfMeasurementController.php

88 lines
2.4 KiB
PHP

<?php namespace App\Http\Controllers\App;
/**
* @copyright (c) 2025 Notsoweb Software (https://notsoweb.com) - All Rights Reserved
*/
use App\Http\Controllers\Controller;
use App\Http\Requests\App\UnitOfMeasurementStoreRequest;
use App\Http\Requests\App\UnitOfMeasurementUpdateRequest;
use App\Models\UnitOfMeasurement;
use Illuminate\Http\Request;
use Notsoweb\ApiResponse\Enums\ApiResponse;
/**
* Descripción
*/
class UnitOfMeasurementController extends Controller
{
public function index(Request $request)
{
$query = UnitOfMeasurement::query();
// Filtro por búsqueda
if ($request->has('q')) {
$query->where(function($q) use ($request) {
$q->where('name', 'like', "%{$request->q}%")
->orWhere('abbreviation', 'like', "%{$request->q}%");
});
}
$units = $query->orderBy('name')->paginate(config('app.pagination'));
return ApiResponse::OK->response([
'units' => $units
]);
}
public function show(UnitOfMeasurement $unit)
{
return ApiResponse::OK->response([
'unit' => $unit
]);
}
public function active()
{
$units = UnitOfMeasurement::active()->orderBy('name')->get();
return ApiResponse::OK->response([
'units' => $units
]);
}
public function store(UnitOfMeasurementStoreRequest $request)
{
$unit = UnitOfMeasurement::create($request->validated());
return ApiResponse::CREATED->response([
'message' => 'Unidad de medida creada correctamente.',
'unit' => $unit
]);
}
public function update(UnitOfMeasurementUpdateRequest $request, UnitOfMeasurement $unit)
{
$unit->update($request->validated());
return ApiResponse::OK->response([
'message' => 'Unidad de medida actualizada correctamente.'
]);
}
public function destroy(UnitOfMeasurement $unit)
{
// Verificar si hay productos asociados a esta unidad de medida
if ($unit->inventories()->exists()) {
return ApiResponse::BAD_REQUEST->response([
'message' => 'No se puede eliminar esta unidad de medida porque hay productos asociados a ella.'
]);
}
$unit->delete();
return ApiResponse::OK->response([
'message' => 'Unidad de medida eliminada correctamente.'
]);
}
}