diff --git a/app/Http/Controllers/Api/SubpedidoController.php b/app/Http/Controllers/Api/SubpedidoController.php index f09e9fd..e78ac85 100644 --- a/app/Http/Controllers/Api/SubpedidoController.php +++ b/app/Http/Controllers/Api/SubpedidoController.php @@ -7,6 +7,7 @@ use Illuminate\Http\Request; use App\Filtros\FiltroDeSubpedido; use App\Subpedido; use App\GrupoDeCompra; +use App\Producto; use Illuminate\Validation\Rule; use Symfony\Component\HttpKernel\Exception\HttpException; @@ -26,7 +27,7 @@ class SubpedidoController extends Controller } /** - * Store a newly created resource in storage. + * Guardar un nuevo registro en el almacenamiento. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response @@ -44,6 +45,28 @@ class SubpedidoController extends Controller return $s; } + /** + * Agregar un producto a un subpedido. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function updateProducto(Subpedido $subpedido, Producto $producto, Request $request) + { + $validado = $this->validateActualizacionDeProducto(); + $cantidad = $validado['cantidad']; + + if ($cantidad){ + //si la cantidad es 1 o más se agrega el producto o actualiza la cantidad + $subpedido->productos()->syncWithoutDetaching([$producto->id => ['cantidad' => $cantidad]]); + + } else { + //si la cantidad es 0, se elimina el producto del subpedido + $subpedido->productos()->detach($producto->id); + } + return response('Producto ' . $producto->nombre . ' actualizado en subpedido de ' . $subpedido->nombre . ' (cantidad ' . $cantidad . ')', 200); + } + protected function validateSubpedido(){ return request()->validate([ 'nombre' => 'required|max:255', @@ -53,4 +76,10 @@ class SubpedidoController extends Controller ] ]); } + + protected function validateActualizacionDeProducto(){ + return request()->validate([ + 'cantidad' => 'required|min:0' + ]); + } } diff --git a/app/Subpedido.php b/app/Subpedido.php index 291690b..5425146 100644 --- a/app/Subpedido.php +++ b/app/Subpedido.php @@ -15,7 +15,7 @@ class Subpedido extends Model public function productos() { - return $this->belongsToMany('App\Producto','pedidos_productos')->withPivot(["cantidad"]); + return $this->belongsToMany('App\Producto')->withPivot(["cantidad"]); } public function grupoDeCompra() diff --git a/routes/api.php b/routes/api.php index 57de256..2d99962 100644 --- a/routes/api.php +++ b/routes/api.php @@ -31,6 +31,10 @@ Route::middleware('api')->group(function () { Route::prefix('subpedidos')->group(function () { Route::get('/','Api\SubpedidoController@index'); Route::post('/','Api\SubpedidoController@store'); + + //@TO DO -> esta ruta debe estar en middleware de auth y/o subpedido + Route::put('/{subpedido}/producto/{producto}','Api\SubpedidoController@updateProducto'); + }); //@TO DO -> esta ruta debe estar en middleware de auth y/o subpedido @@ -41,6 +45,8 @@ Route::middleware('api')->group(function () { //@TO DO -> esta ruta debe estar en middleware de auth y/o subpedido Route::prefix('productos')->group(function () { Route::get('/','Api\ProductoController@index'); - Route::get('{producto}','Api\ProductoController@show'); + Route::get('{producto}','Api\ProductoController@show'); }); + + //@TO DO -> esta ruta debe estar en middleware de auth y/o subpedido });