- Migrar manejo de stock de a . - Implementar para centralizar lógica de entradas, salidas y transferencias. - Añadir (CRUD) y Requests de validación. - Actualizar reportes, cálculos de valor y migraciones para la nueva estructura. - Agregar campo para rastreo de movimientos.
131 lines
3.3 KiB
PHP
131 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\App;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\App\WarehouseStoreRequest;
|
|
use App\Http\Requests\App\WarehouseUpdateRequest;
|
|
use App\Models\Warehouse;
|
|
use Illuminate\Http\Request;
|
|
use Notsoweb\ApiResponse\Enums\ApiResponse;
|
|
|
|
/**
|
|
* Controlador para gestión de almacenes
|
|
*/
|
|
class WarehouseController extends Controller
|
|
{
|
|
/**
|
|
* Listar almacenes
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
$warehouse = Warehouse::query();
|
|
|
|
if ($request->has('active')) {
|
|
$warehouse->where('is_active', $request->boolean('active'));
|
|
}
|
|
|
|
if ($request->has('q') && $request->q) {
|
|
$warehouse->where(function($query) use ($request) {
|
|
$query->where('name', 'like', "%{$request->q}%")
|
|
->orWhere('code', 'like', "%{$request->q}%");
|
|
});
|
|
}
|
|
|
|
$warehouse->orderBy('id', 'ASC');
|
|
|
|
$warehouses = $request->boolean('all')
|
|
? $warehouse->get()
|
|
: $warehouse->paginate(config('app.pagination'));
|
|
return ApiResponse::OK->response([
|
|
'warehouses' => $warehouses,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Ver detalle de un almacén con su inventario
|
|
*/
|
|
public function show(int $id)
|
|
{
|
|
$warehouse = Warehouse::find($id);
|
|
|
|
if (!$warehouse) {
|
|
return ApiResponse::NOT_FOUND->response([
|
|
'message' => 'Almacén no encontrado'
|
|
]);
|
|
}
|
|
|
|
$inventories = $warehouse->inventories()
|
|
->wherePivot('stock', '>', 0)
|
|
->paginate(config('app.pagination'));
|
|
|
|
return ApiResponse::OK->response([
|
|
'warehouse' => $warehouse,
|
|
'inventories' => $inventories,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Crear almacén
|
|
*/
|
|
public function store(WarehouseStoreRequest $request)
|
|
{
|
|
$warehouse = Warehouse::create($request->validated());
|
|
|
|
return ApiResponse::CREATED->response([
|
|
'message' => 'Almacén creado correctamente',
|
|
'warehouse' => $warehouse,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Actualizar almacén
|
|
*/
|
|
public function update(WarehouseUpdateRequest $request, int $id)
|
|
{
|
|
$warehouse = Warehouse::find($id);
|
|
|
|
if (!$warehouse) {
|
|
return ApiResponse::NOT_FOUND->response([
|
|
'message' => 'Almacén no encontrado'
|
|
]);
|
|
}
|
|
|
|
$warehouse->update($request->validated());
|
|
|
|
return ApiResponse::OK->response([
|
|
'message' => 'Almacén actualizado correctamente',
|
|
'warehouse' => $warehouse,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Eliminar almacén
|
|
*/
|
|
public function destroy(int $id)
|
|
{
|
|
$warehouse = Warehouse::find($id);
|
|
|
|
if (!$warehouse) {
|
|
return ApiResponse::NOT_FOUND->response([
|
|
'message' => 'Almacén no encontrado'
|
|
]);
|
|
}
|
|
|
|
// Verificar si tiene stock
|
|
$hasStock = $warehouse->inventories()->wherePivot('stock', '>', 0)->exists();
|
|
|
|
if ($hasStock) {
|
|
return ApiResponse::BAD_REQUEST->response([
|
|
'message' => 'No se puede eliminar un almacén con stock'
|
|
]);
|
|
}
|
|
|
|
$warehouse->delete();
|
|
|
|
return ApiResponse::OK->response([
|
|
'message' => 'Almacén eliminado correctamente'
|
|
]);
|
|
}
|
|
}
|