Compare commits
9 commits
0f8e58841e
...
71a6e496e9
Author | SHA1 | Date | |
---|---|---|---|
71a6e496e9 | |||
dcf1659042 | |||
8dc76eca67 | |||
c25b369e26 | |||
bc37347c30 | |||
5670ddf55a | |||
deca03865f | |||
68cb740187 | |||
cdd10a870d |
8 changed files with 194 additions and 35 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
27
app/Http/Controllers/FaltantesYSobrantesController.php
Normal file
27
app/Http/Controllers/FaltantesYSobrantesController.php
Normal 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));
|
||||
}
|
||||
}
|
|
@ -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,
|
||||
];
|
||||
}
|
||||
}
|
|
@ -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,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
28
app/Http/Resources/PedidoFaltantesYSobrantesResource.php
Normal file
28
app/Http/Resources/PedidoFaltantesYSobrantesResource.php
Normal 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,
|
||||
];
|
||||
}
|
||||
}
|
|
@ -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
1
package-lock.json
generated
|
@ -4,7 +4,6 @@
|
|||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "www",
|
||||
"dependencies": {
|
||||
"animate.css": "^4.1.1",
|
||||
"bulma": "^0.9.4",
|
||||
|
|
|
@ -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');
|
||||
|
|
Loading…
Add table
Reference in a new issue