forked from nathalie/pedi2
		
	
		
			
				
	
	
		
			112 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
	
		
			3.4 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
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Mostrar una lista de productos.
 | 
						|
     *
 | 
						|
     * @param App\Filtros\FiltroDeSubpedido $filtros
 | 
						|
     * @param \Illuminate\Http\Request  $request
 | 
						|
     * @return \Illuminate\Http\Response
 | 
						|
     */
 | 
						|
    public function index(FiltroDeSubpedido $filtros, Request $request)
 | 
						|
    {
 | 
						|
        return Subpedido::filtrar($filtros)->get();
 | 
						|
    }
 | 
						|
 | 
						|
    public function indexResources(FiltroDeSubpedido $filtros, Request $request)
 | 
						|
    {
 | 
						|
        return SubpedidoResource::collection(Subpedido::filtrar($filtros)->get());
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Store a newly created resource in storage.
 | 
						|
     *
 | 
						|
     * @param  \Illuminate\Http\Request  $request
 | 
						|
     * @return \Illuminate\Http\Response
 | 
						|
     */
 | 
						|
    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 $s;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function validateSubpedido(){
 | 
						|
        return request()->validate([
 | 
						|
            'nombre'                => 'required|max:255',
 | 
						|
            'grupo_de_compra_id'    => [
 | 
						|
                'required',
 | 
						|
                Rule::in(GrupoDeCompra::all()->pluck('id')),
 | 
						|
            ]
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Display the specified resource.
 | 
						|
     *
 | 
						|
     * @param  \App\Subpedido  $subpedido
 | 
						|
     * @return \Illuminate\Http\Response
 | 
						|
     */
 | 
						|
    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) return new SubpedidoResource($subpedido);
 | 
						|
        
 | 
						|
        $valid = request()->validate([
 | 
						|
            'cantidad'              => 'required|min:0',
 | 
						|
            'producto_id'    => [
 | 
						|
                'required',
 | 
						|
                Rule::in(Producto::all()->pluck('id')),
 | 
						|
            ]
 | 
						|
        ]);
 | 
						|
 | 
						|
        $producto = Producto::find($valid['producto_id']);
 | 
						|
 | 
						|
        $subpedido->syncProducto($producto, $valid['cantidad']);
 | 
						|
        return new SubpedidoResource($subpedido);
 | 
						|
    }
 | 
						|
 | 
						|
    public function toggleAprobacion(Subpedido $subpedido) {
 | 
						|
        $valid = request()->validate([
 | 
						|
            'aprobacion' => 'required | boolean'
 | 
						|
        ]);
 | 
						|
        $subpedido->toggleAprobacion($valid['aprobacion']);
 | 
						|
        return new SubpedidoResource($subpedido);
 | 
						|
    }
 | 
						|
    
 | 
						|
    public function syncDevoluciones(Subpedido $subpedido) {
 | 
						|
        if ($subpedido->aprobado) return new SubpedidoResource($subpedido);
 | 
						|
 | 
						|
        $valid = request()->validate([
 | 
						|
            'total' => 'required|min:0',
 | 
						|
            'notas' => 'required',
 | 
						|
        ]);
 | 
						|
        $subpedido->syncDevoluciones($valid['total'], $valid['notas']);
 | 
						|
 | 
						|
        return new SubpedidoResource($subpedido);
 | 
						|
    }
 | 
						|
}
 |