forked from nathalie/pedi2
		
	
		
			
				
	
	
		
			98 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Http\Controllers\Api;
 | |
| 
 | |
| use App\Http\Controllers\Controller;
 | |
| use App\Producto;
 | |
| use Illuminate\Http\Request;
 | |
| use App\Filtros\FiltroDeSubpedido;
 | |
| use App\Subpedido;
 | |
| use App\GrupoDeCompra;
 | |
| use App\Http\Resources\SubpedidoResource;
 | |
| use Illuminate\Validation\Rule;
 | |
| use Symfony\Component\HttpKernel\Exception\HttpException;
 | |
| 
 | |
| 
 | |
| class SubpedidoController extends Controller
 | |
| {
 | |
|     public function index(FiltroDeSubpedido $filtros, Request $request)
 | |
|     {
 | |
|         return Subpedido::filtrar($filtros)->select('id','nombre')->get();
 | |
|     }
 | |
| 
 | |
|     public function indexResources(FiltroDeSubpedido $filtros, Request $request)
 | |
|     {
 | |
|         return SubpedidoResource::collection(Subpedido::filtrar($filtros)->get());
 | |
|     }
 | |
| 
 | |
|     public function store(Request  $request)
 | |
|     {
 | |
|         $validado = $this->validateSubpedido();
 | |
|         if (Subpedido::where("nombre",$validado["nombre"])->where("grupo_de_compra_id",$validado["grupo_de_compra_id"])->get()->count()) {
 | |
|             throw new HttpException(400, "Ya existe un subpedido con este nombre");
 | |
|         }
 | |
|         $s = new Subpedido();
 | |
|         $s->nombre = $validado["nombre"];
 | |
|         $s->grupo_de_compra_id = $validado["grupo_de_compra_id"];
 | |
|         $s->save();
 | |
|         return $this->show($s);
 | |
|     }
 | |
| 
 | |
|     protected function validateSubpedido(): array
 | |
|     {
 | |
|         return request()->validate([
 | |
|             'nombre'                => 'required|max:255',
 | |
|             'grupo_de_compra_id'    => [
 | |
|                 'required',
 | |
|                 Rule::in(GrupoDeCompra::all()->pluck('id')),
 | |
|             ]
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
|     public function show(Subpedido $subpedido)
 | |
|     {
 | |
|         return new SubpedidoResource($subpedido);
 | |
|     }
 | |
| 
 | |
|     // recibe request, saca producto y cantidad, valida, y pasa a syncProducto en Subpedido
 | |
|     public function syncProductos(Subpedido $subpedido) {
 | |
|         if ($subpedido->aprobado)
 | |
|             abort(400, "No se puede modificar un pedido aprobado.");
 | |
| 
 | |
|         $valid = request()->validate([
 | |
|             'cantidad'       => ['integer','required','min:0'],
 | |
|             'notas'          => 'nullable',
 | |
|             'producto_id'    => [
 | |
|                 'required',
 | |
|                 Rule::in(Producto::all()->pluck('id')),
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         $producto = Producto::find($valid['producto_id']);
 | |
|         $notas = $valid['notas'];
 | |
|         $cantidad = $valid['cantidad'];
 | |
|         $subpedido->syncProducto($producto, $cantidad, $notas ?? "");
 | |
|         return new SubpedidoResource($subpedido);
 | |
|     }
 | |
| 
 | |
|     public function toggleAprobacion(Subpedido $subpedido) {
 | |
|         $valid = request()->validate([
 | |
|             'aprobacion' => 'required | boolean'
 | |
|         ]);
 | |
|         $subpedido->toggleAprobacion($valid['aprobacion']);
 | |
|         return response()->noContent();
 | |
|     }
 | |
| 
 | |
|     public function syncDevoluciones(Subpedido $subpedido) {
 | |
|         if ($subpedido->aprobado)
 | |
|             abort(400, "No se puede modificar un pedido aprobado.");
 | |
| 
 | |
|         $valid = request()->validate([
 | |
|             'total' => 'required|min:0',
 | |
|             'notas' => 'min:0'
 | |
|         ]);
 | |
|         $subpedido->syncDevoluciones($valid['total'], $valid['notas'] ?? "");
 | |
| 
 | |
|         return new SubpedidoResource($subpedido);
 | |
|     }
 | |
| }
 |