Compare commits

...

9 commits

8 changed files with 194 additions and 35 deletions

View file

@ -68,23 +68,11 @@ class SubpedidoController extends Controller
// 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);
$faltantesYSobrantes = TipoPedido::firstOrCreate(['nombre' => 'faltantes_y_sobrantes']);
if ($subpedido->tipo_pedido_id == $faltantesYSobrantes->id) {
return $this->syncFaltantesYSobrantes($subpedido);
}
return $this->syncPedidoNormal($subpedido);
}
public function toggleAprobacion(Subpedido $subpedido) {
@ -107,4 +95,53 @@ class SubpedidoController extends Controller
return new SubpedidoResource($subpedido);
}
/**
* @param Subpedido $subpedido
* @return SubpedidoResource
*/
public function syncPedidoNormal(Subpedido $subpedido): SubpedidoResource
{
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);
}
/**
* @param Subpedido $subpedido
* @return SubpedidoResource
*/
public function syncFaltantesYSobrantes(Subpedido $subpedido): SubpedidoResource
{
$producto_id = request()->producto_id;
$producto = Producto::find($producto_id);
if (!$producto) {
throw new HttpException(400, "No se encontro el producto.");
}
$cantidad = -1*($subpedido->productos()->find($producto_id)?->cantidad ?? 0);
$valid = request()->validate([
'cantidad' => ['integer', 'required', 'min:' . $cantidad],
'producto_id' => ['required']
]);
$cantidad = $valid['cantidad'];
$subpedido->syncProducto($producto, $cantidad, null);
return new SubpedidoResource($subpedido);
}
}

View file

@ -0,0 +1,27 @@
<?php
namespace App\Http\Controllers;
use App\GrupoDeCompra;
use App\Http\Resources\PedidoFaltantesYSobrantesResource;
use App\Http\Resources\PedidoOllasResource;
use App\TipoPedido;
use Illuminate\Http\Request;
class FaltantesYSobrantesController extends Controller
{
public function show()
{
return view('auth/login');
}
public function pedido(GrupoDeCompra $gdc)
{
$tipoFaltantesYSobrantes = TipoPedido::firstOrCreate(['nombre' => 'faltantes_y_sobrantes']);
$pedido = $gdc->subpedidos()->firstOrCreate([
'nombre' => 'Faltantes y Sobrantes de ' . $gdc->nombre,
'tipo_pedido_id' => $tipoFaltantesYSobrantes->id,
]);
return response()->json(new PedidoFaltantesYSobrantesResource($pedido));
}
}

View file

@ -0,0 +1,29 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class GrupoDeCompraFaltantesYSobrantesResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
$productos_cantidades = [];
$productosPedidos = $this->productosPedidos();
foreach ($productosPedidos as $productoPedido) {
$productos_cantidades[$productoPedido->producto_id] = $productoPedido->cantidad_pedida;
}
return [
'id' => $this->id,
'nombre' => $this->nombre,
'productos_cantidades' => $productos_cantidades,
];
}
}

View file

@ -15,6 +15,14 @@ class GrupoDeCompraResource extends JsonResource
*/
public function toArray($request): array
{
$productos_cantidades = [];
$productos_pedidos = $this->productosPedidos();
foreach ($productos_pedidos as $productoPedido) {
$productos_cantidades[] = [
"id" => $productoPedido->producto_id,
"cantidad" => $productoPedido->cantidad_pedida
];
}
return [
'id' => $this->id,
'nombre' => $this->nombre,
@ -29,6 +37,7 @@ class GrupoDeCompraResource extends JsonResource
'total_a_transferir' => number_format($this->totalATransferir(),2),
'total_transporte' => number_format($this->totalTransporte()),
'cantidad_transporte' => number_format($this->cantidadTransporte()),
'productos_cantidades' => $productos_cantidades,
];
}
}

View file

@ -0,0 +1,28 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class PedidoFaltantesYSobrantesResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request): array
{
$productos = $this->productos;
foreach ($productos as $producto) {
$producto['pivot']['total'] = number_format($producto->pivot->cantidad * $producto->precio, 2);
}
return [
'id' => $this->id,
'nombre' => $this->nombre,
'productos' => $productos,
];
}
}

View file

@ -0,0 +1,30 @@
<?php
use App\TipoPedido;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
TipoPedido::firstOrCreate(['nombre' => 'faltantes_y_sobrantes']);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
$faltantesYSobrantes = TipoPedido::where('nombre', 'faltantes_y_sobrantes')->firstOrFail();
$faltantesYSobrantes->delete();
}
};

1
package-lock.json generated
View file

@ -4,7 +4,6 @@
"requires": true,
"packages": {
"": {
"name": "www",
"dependencies": {
"animate.css": "^4.1.1",
"bulma": "^0.9.4",

View file

@ -38,27 +38,27 @@ Route::middleware(['auth', 'role:barrio'])->group(function() {
Route::get('/admin/login', 'AdminController@show')->name('admin.login');
Route::middleware(['auth', 'role:admin_barrio'])->group(function () {
Route::get('/admin', 'RouteController@main')->name('admin');
Route::get('/admin/exportar-planillas-a-pdf/{gdc}', 'AdminController@exportarPedidosAPdf');
Route::get('/admin/exportar-pedido-a-csv/{gdc}', 'AdminController@exportarPedidoACSV');
Route::get('/admin/exportar-pedido-con-nucleos-a-csv/{gdc}', 'AdminController@exportarPedidoConNucleosACSV');
Route::middleware(['auth', 'role:admin_barrio'])->prefix('admin')->group(function () {
Route::get('/', 'RouteController@main')->name('admin');
Route::get('/exportar-planillas-a-pdf/{gdc}', 'AdminController@exportarPedidosAPdf');
Route::get('/exportar-pedido-a-csv/{gdc}', 'AdminController@exportarPedidoACSV');
Route::get('/exportar-pedido-con-nucleos-a-csv/{gdc}', 'AdminController@exportarPedidoConNucleosACSV');
Route::get('/{gdc}/faltantes-y-sobrantes', 'FaltantesYSobrantesController@pedido');
});
Route::get('/comisiones/login', 'ComisionesController@show')->name('comisiones.login');
Route::middleware(['auth', 'role:comision'])->group( function() {
Route::get('/comisiones', 'RouteController@main')->name('comisiones');
Route::get('/comisiones/pedidos/descargar', 'ComisionesController@descargarPedidos')->name('comisiones.pedidos.descargar');
Route::get('/comisiones/pedidos/notas', 'ComisionesController@descargarNotas')->name('comisiones.pedidos.notas');
Route::get('/comisiones/pedidos/pdf', 'ComisionesController@pdf')->name('comisiones.pedidos.pdf');
Route::get('/comisiones/pedidos/ollas', 'ComisionesController@descargarPedidosDeOllas')->name('comisiones.pedidos.ollas');
Route::get('/comisiones/canasta/ejemplo', 'ComisionesController@descargarCanastaEjemplo')->name('comisiones.canasta.ejemplo');
Route::post('/comisiones/canasta', 'ComisionesController@cargarCanasta')->name('comisiones.canasta');
Route::get('/comisiones/saldos/ejemplo', 'ComisionesController@descargarSaldosEjemplo')->name('comisiones.saldos.ejemplo');
Route::post('/comisiones/saldos', 'ComisionesController@cargarSaldos')->name('comisiones.saldos');
Route::put('/comisiones/parametros/{parametro_id}', 'ComisionesController@modificarParametros');
Route::middleware(['auth', 'role:comision'])->prefix('comisiones')->group( function() {
Route::get('/', 'RouteController@main')->name('comisiones');
Route::get('/pedidos/descargar', 'ComisionesController@descargarPedidos')->name('comisiones.pedidos.descargar');
Route::get('/pedidos/notas', 'ComisionesController@descargarNotas')->name('comisiones.pedidos.notas');
Route::get('/pedidos/pdf', 'ComisionesController@pdf')->name('comisiones.pedidos.pdf');
Route::get('/pedidos/ollas', 'ComisionesController@descargarPedidosDeOllas')->name('comisiones.pedidos.ollas');
Route::get('/canasta/ejemplo', 'ComisionesController@descargarCanastaEjemplo')->name('comisiones.canasta.ejemplo');
Route::post('/canasta', 'ComisionesController@cargarCanasta')->name('comisiones.canasta');
Route::get('/saldos/ejemplo', 'ComisionesController@descargarSaldosEjemplo')->name('comisiones.saldos.ejemplo');
Route::post('/saldos', 'ComisionesController@cargarSaldos')->name('comisiones.saldos');
Route::put('/parametros/{parametro_id}', 'ComisionesController@modificarParametros');
});
Route::get('/ollas/login', 'OllasController@show')->name('ollas.login');