From cdd10a870d3dc174283fbaa78bcd7c49c0508db7 Mon Sep 17 00:00:00 2001 From: ale Date: Wed, 27 Aug 2025 19:46:19 -0300 Subject: [PATCH 01/38] actualizado --- package-lock.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 615add8..33e0403 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,7 +4,6 @@ "requires": true, "packages": { "": { - "name": "www", "dependencies": { "animate.css": "^4.1.1", "bulma": "^0.9.4", -- 2.48.1 From 68cb740187c21c037e572ba029194a110818ebf1 Mon Sep 17 00:00:00 2001 From: ale Date: Wed, 27 Aug 2025 20:01:31 -0300 Subject: [PATCH 02/38] Agregado tipo pedido faltantes y sobrantes a db --- ...5849_tipo_pedido_faltantes_y_sobrantes.php | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 database/migrations/2025_08_27_195849_tipo_pedido_faltantes_y_sobrantes.php diff --git a/database/migrations/2025_08_27_195849_tipo_pedido_faltantes_y_sobrantes.php b/database/migrations/2025_08_27_195849_tipo_pedido_faltantes_y_sobrantes.php new file mode 100644 index 0000000..9e8f87b --- /dev/null +++ b/database/migrations/2025_08_27_195849_tipo_pedido_faltantes_y_sobrantes.php @@ -0,0 +1,30 @@ + 'faltantes_y_sobrantes']); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + $faltantesYSobrantes = TipoPedido::where('nombre', 'faltantes_y_sobrantes')->firstOrFail(); + $faltantesYSobrantes->delete(); + } +}; -- 2.48.1 From deca03865fbc4a20ff5e649f2662eb3b024f65ea Mon Sep 17 00:00:00 2001 From: ale Date: Wed, 27 Aug 2025 20:26:45 -0300 Subject: [PATCH 03/38] Agregado resource para grupo de compra de faltantes y sobrantes --- ...upoDeCompraFaltantesYSobrantesResource.php | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 app/Http/Resources/GrupoDeCompraFaltantesYSobrantesResource.php diff --git a/app/Http/Resources/GrupoDeCompraFaltantesYSobrantesResource.php b/app/Http/Resources/GrupoDeCompraFaltantesYSobrantesResource.php new file mode 100644 index 0000000..7640cfb --- /dev/null +++ b/app/Http/Resources/GrupoDeCompraFaltantesYSobrantesResource.php @@ -0,0 +1,29 @@ + + */ + 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, + ]; + } +} -- 2.48.1 From 5670ddf55a445e8a3b275c21aa5f3fa6be4809e6 Mon Sep 17 00:00:00 2001 From: ale Date: Wed, 27 Aug 2025 20:40:12 -0300 Subject: [PATCH 04/38] Agregado resource para pedido de faltantes y sobrantes --- .../PedidoFaltantesYSobrantesResource.php | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 app/Http/Resources/PedidoFaltantesYSobrantesResource.php diff --git a/app/Http/Resources/PedidoFaltantesYSobrantesResource.php b/app/Http/Resources/PedidoFaltantesYSobrantesResource.php new file mode 100644 index 0000000..7c381e8 --- /dev/null +++ b/app/Http/Resources/PedidoFaltantesYSobrantesResource.php @@ -0,0 +1,28 @@ +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, + ]; + } +} -- 2.48.1 From bc37347c30c748f186c7b0be4914453b0e31e755 Mon Sep 17 00:00:00 2001 From: ale Date: Wed, 27 Aug 2025 20:41:37 -0300 Subject: [PATCH 05/38] =?UTF-8?q?Agregado=20m=C3=A9todo=20para=20crear=20p?= =?UTF-8?q?edido=20de=20faltantes=20y=20sobrantes=20de=20un=20barrio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FaltantesYSobrantesController.php | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 app/Http/Controllers/FaltantesYSobrantesController.php diff --git a/app/Http/Controllers/FaltantesYSobrantesController.php b/app/Http/Controllers/FaltantesYSobrantesController.php new file mode 100644 index 0000000..ea4918c --- /dev/null +++ b/app/Http/Controllers/FaltantesYSobrantesController.php @@ -0,0 +1,27 @@ + '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)); + } +} -- 2.48.1 From c25b369e2650717116d2764cc0b849db19da22b7 Mon Sep 17 00:00:00 2001 From: ale Date: Wed, 27 Aug 2025 20:58:54 -0300 Subject: [PATCH 06/38] Agregada ruta para obtener pedido de faltantes y sobrantes --- routes/web.php | 1 + 1 file changed, 1 insertion(+) diff --git a/routes/web.php b/routes/web.php index 96f43bc..b55bd67 100644 --- a/routes/web.php +++ b/routes/web.php @@ -44,6 +44,7 @@ Route::middleware(['auth', 'role:admin_barrio'])->group(function () { 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::get('/{gdc}/faltantes-y-sobrantes', 'FaltantesYSobrantesController@pedido'); }); Route::get('/comisiones/login', 'ComisionesController@show')->name('comisiones.login'); -- 2.48.1 From 8dc76eca67148303af35847debc3d36124e7eab7 Mon Sep 17 00:00:00 2001 From: ale Date: Wed, 27 Aug 2025 20:59:19 -0300 Subject: [PATCH 07/38] Agregada lista de productos con id y cantidad a resource de grupo de compra para admin --- app/Http/Resources/GrupoDeCompraResource.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/Http/Resources/GrupoDeCompraResource.php b/app/Http/Resources/GrupoDeCompraResource.php index 82f2120..2546cfc 100644 --- a/app/Http/Resources/GrupoDeCompraResource.php +++ b/app/Http/Resources/GrupoDeCompraResource.php @@ -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, ]; } } -- 2.48.1 From dcf1659042dd4b7148441d645be8cc78c4349c2c Mon Sep 17 00:00:00 2001 From: ale Date: Wed, 27 Aug 2025 20:59:29 -0300 Subject: [PATCH 08/38] Agregados prefijos de rutas --- routes/web.php | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/routes/web.php b/routes/web.php index b55bd67..4a1740f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -38,28 +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'); -- 2.48.1 From 71a6e496e925b0b63676b5faa229392f074c9e82 Mon Sep 17 00:00:00 2001 From: ale Date: Wed, 27 Aug 2025 21:10:36 -0300 Subject: [PATCH 09/38] Modificada logica de syncProductos para considerar caso de faltantes (con cantidades negativas) --- .../Controllers/Api/SubpedidoController.php | 71 ++++++++++++++----- 1 file changed, 54 insertions(+), 17 deletions(-) diff --git a/app/Http/Controllers/Api/SubpedidoController.php b/app/Http/Controllers/Api/SubpedidoController.php index e340e01..4513c7a 100644 --- a/app/Http/Controllers/Api/SubpedidoController.php +++ b/app/Http/Controllers/Api/SubpedidoController.php @@ -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); + } } -- 2.48.1 From f008b9e2637384af715f3806cf34c298a73f7f3a Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 13 Sep 2025 17:43:09 -0300 Subject: [PATCH 10/38] Agregado default "" a parametro 'notas' en syncProducto --- app/Subpedido.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Subpedido.php b/app/Subpedido.php index df989af..5c2f24f 100644 --- a/app/Subpedido.php +++ b/app/Subpedido.php @@ -109,7 +109,7 @@ class Subpedido extends Model } // Actualiza el pedido, agregando o quitando del subpedido según sea necesario. Debe ser llamado desde el controlador de subpedidos, luego de validar que los parámetros $producto y $cantidad son correctos. También calcula el subtotal por producto. - public function syncProducto(Producto $producto, int $cantidad, string $notas) + public function syncProducto(Producto $producto, int $cantidad, string $notas = "") { if ($cantidad) { //si la cantidad es 1 o más se agrega el producto o actualiza la cantidad -- 2.48.1 From e69c379304fe7cf13f7947353158add3c90d3c00 Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 13 Sep 2025 17:43:32 -0300 Subject: [PATCH 11/38] =?UTF-8?q?Mejorada=20l=C3=B3gica=20de=20sync=20pedi?= =?UTF-8?q?do=20de=20faltantes=20y=20sobrantes=20con=20validaci=C3=B3n=20d?= =?UTF-8?q?e=20cantidad=20para=20el=20caso=20faltantes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Api/SubpedidoController.php | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/app/Http/Controllers/Api/SubpedidoController.php b/app/Http/Controllers/Api/SubpedidoController.php index 4513c7a..82bab9f 100644 --- a/app/Http/Controllers/Api/SubpedidoController.php +++ b/app/Http/Controllers/Api/SubpedidoController.php @@ -127,21 +127,28 @@ class SubpedidoController extends Controller */ 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' => ['integer', 'required'], + 'producto_id' => [ + 'required', + Rule::in(Producto::all()->pluck('id')), + ] ]); + $producto = Producto::find($valid['producto_id']); + if ($producto->bono) + abort(400, "No te puede haber faltado un bono"); + $cantidad = $valid['cantidad']; - $subpedido->syncProducto($producto, $cantidad, null); - return new SubpedidoResource($subpedido); + if ($cantidad < 0) { // caso faltantes + $barrio = GrupoDeCompra::find($subpedido->grupo_de_compra_id); + $productosPedidos = $barrio->productosPedidos(true); + $cantidadPedida = intval($productosPedidos->where('producto_id', $producto->id)->first()->cantidad_pedida); + + if ($cantidadPedida + $cantidad < 0) + abort(400, 'No te puede faltar más de lo que pediste'); + } + + $subpedido->syncProducto($producto, $cantidad); } } -- 2.48.1 From 59af3693cb62d714ff3584a87f4335e61bd8e43b Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 13 Sep 2025 17:43:39 -0300 Subject: [PATCH 12/38] Eliminado resource innecesario --- ...upoDeCompraFaltantesYSobrantesResource.php | 29 ------------------- 1 file changed, 29 deletions(-) delete mode 100644 app/Http/Resources/GrupoDeCompraFaltantesYSobrantesResource.php diff --git a/app/Http/Resources/GrupoDeCompraFaltantesYSobrantesResource.php b/app/Http/Resources/GrupoDeCompraFaltantesYSobrantesResource.php deleted file mode 100644 index 7640cfb..0000000 --- a/app/Http/Resources/GrupoDeCompraFaltantesYSobrantesResource.php +++ /dev/null @@ -1,29 +0,0 @@ - - */ - 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, - ]; - } -} -- 2.48.1 From f521c726efcb292b8838ba56a92338400cb21ca3 Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 13 Sep 2025 17:53:49 -0300 Subject: [PATCH 13/38] Limpieza --- app/Http/Controllers/FaltantesYSobrantesController.php | 7 ------- 1 file changed, 7 deletions(-) diff --git a/app/Http/Controllers/FaltantesYSobrantesController.php b/app/Http/Controllers/FaltantesYSobrantesController.php index ea4918c..c98bd60 100644 --- a/app/Http/Controllers/FaltantesYSobrantesController.php +++ b/app/Http/Controllers/FaltantesYSobrantesController.php @@ -4,17 +4,10 @@ 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']); -- 2.48.1 From 45c8fc1af002efac993b16de2b2be6fdc908b3e7 Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 13 Sep 2025 18:15:56 -0300 Subject: [PATCH 14/38] Agregado componente para tabla totales --- .../js/components/admin/TablaPedidos.vue | 52 +------------- .../js/components/admin/TablaTotales.vue | 69 +++++++++++++++++++ 2 files changed, 72 insertions(+), 49 deletions(-) create mode 100644 resources/js/components/admin/TablaTotales.vue diff --git a/resources/js/components/admin/TablaPedidos.vue b/resources/js/components/admin/TablaPedidos.vue index 55bbf5a..c2ac757 100644 --- a/resources/js/components/admin/TablaPedidos.vue +++ b/resources/js/components/admin/TablaPedidos.vue @@ -18,71 +18,25 @@ /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TOTALES
Total a recaudar:$ {{ devoluciones_habilitadas ? total_a_recaudar : total_sin_devoluciones }}
Total bonos barriales:$ {{ total_barrial }}
Total devoluciones:- $ {{ total_devoluciones }}
Cantidad bonos de transporte:{{ cantidad_transporte }}
Total bonos de transporte:$ {{ total_transporte }}
Total de pedido:$ {{ total_de_pedido }}
{{ texto_saldo }} $ {{ saldo }}
Total a transferir:$ {{ total_a_transferir }}
+ diff --git a/resources/js/components/admin/TablaTotales.vue b/resources/js/components/admin/TablaTotales.vue new file mode 100644 index 0000000..49e3836 --- /dev/null +++ b/resources/js/components/admin/TablaTotales.vue @@ -0,0 +1,69 @@ + + + + + -- 2.48.1 From 38ff38fb05b6c81582f2b2d6c8419a36535f6c8a Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 13 Sep 2025 18:16:40 -0300 Subject: [PATCH 15/38] Formato --- resources/js/components/admin/DropdownDescargar.vue | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/resources/js/components/admin/DropdownDescargar.vue b/resources/js/components/admin/DropdownDescargar.vue index 47ea269..fb661b2 100644 --- a/resources/js/components/admin/DropdownDescargar.vue +++ b/resources/js/components/admin/DropdownDescargar.vue @@ -2,7 +2,11 @@

@@ -45,10 +53,14 @@ export default { }, methods: { ...mapActions('admin', ['getGrupoDeCompra']), + ...mapActions('ui', ['toast']), setSeccionActiva(tabId) { this.tabActiva = tabId; this.seccionActiva = tabId + "-seccion"; }, + abrirFaltantesYSobrantes() { + this.toast({ mensaje: 'Tamos implementando' }); + } }, async mounted() { await this.getGrupoDeCompra(); -- 2.48.1 From d7cef79a50f9cf29a5f5f27ce62ba7a4d5ccd9de Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 13 Sep 2025 18:35:35 -0300 Subject: [PATCH 17/38] =?UTF-8?q?Agregada=20informaci=C3=B3n=20de=20produc?= =?UTF-8?q?tos=20y=20cantidades=20pedidas=20por=20el=20barrio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/js/store/modules/admin/index.ts | 3 +++ resources/js/store/modules/admin/types.ts | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/resources/js/store/modules/admin/index.ts b/resources/js/store/modules/admin/index.ts index bec6b01..4da30e9 100644 --- a/resources/js/store/modules/admin/index.ts +++ b/resources/js/store/modules/admin/index.ts @@ -17,6 +17,7 @@ const state: AdminState = { total_transporte: undefined, cantidad_transporte: undefined, saldo: undefined, + productos_cantidades: [], }; const mutations = { @@ -40,6 +41,8 @@ const mutations = { state.total_transporte = grupo_de_compra.total_transporte; state.cantidad_transporte = grupo_de_compra.cantidad_transporte; state.saldo = grupo_de_compra.saldo; + state.productos_cantidades = grupo_de_compra.productos_cantidades + .map(pc => ({...pc, cantidad: parseInt(pc.cantidad)})); }, toggleCaracteristica(state, { caracteristica_id }) { state[`${caracteristica_id}_habilitadas`] = !state[`${caracteristica_id}_habilitadas`]; diff --git a/resources/js/store/modules/admin/types.ts b/resources/js/store/modules/admin/types.ts index 6e38ad7..3991dbb 100644 --- a/resources/js/store/modules/admin/types.ts +++ b/resources/js/store/modules/admin/types.ts @@ -17,6 +17,7 @@ export interface Barrio { total_transporte?: number, cantidad_transporte?: number, saldo?: number, + productos_cantidades: ProductoCantidad[], } export interface Pedido { @@ -31,3 +32,8 @@ export interface Pedido { devoluciones_total: number, devoluciones_notas: string } + +export interface ProductoCantidad { + id: number, + cantidad: number, +} -- 2.48.1 From e8b59362332f21dce20c90a4dcec04d473c5c515 Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 13 Sep 2025 19:03:05 -0300 Subject: [PATCH 18/38] Agregado control para faltantes y sobrantes en store de ui --- resources/js/store/modules/ui/index.ts | 4 ++++ resources/js/store/modules/ui/types.ts | 2 ++ 2 files changed, 6 insertions(+) diff --git a/resources/js/store/modules/ui/index.ts b/resources/js/store/modules/ui/index.ts index 4777b8d..04c6c20 100644 --- a/resources/js/store/modules/ui/index.ts +++ b/resources/js/store/modules/ui/index.ts @@ -4,6 +4,7 @@ const state: UiState = { show_chismosa: false, show_devoluciones: false, show_tags: true, + show_faltantes_y_sobrantes: false, burger_activa: false, tags_interactuada: false, migas: [{ nombre: 'Pedidos', action: 'pedido/resetear' }], @@ -24,6 +25,9 @@ const mutations = { state.tags_interactuada = manual; state.show_tags = !state.show_tags; }, + toggleFaltantesYSobrantes(state) { + state.show_faltantes_y_sobrantes = !state.show_faltantes_y_sobrantes; + }, toggleBurger(state) { state.burger_activa = !state.burger_activa; }, diff --git a/resources/js/store/modules/ui/types.ts b/resources/js/store/modules/ui/types.ts index 6b7cd86..4d84d2a 100644 --- a/resources/js/store/modules/ui/types.ts +++ b/resources/js/store/modules/ui/types.ts @@ -3,6 +3,8 @@ export interface UiState { show_chismosa: boolean, show_devoluciones: boolean, show_tags: boolean, + show_faltantes_y_sobrantes: boolean, + burger_activa: boolean, tags_interactuada: boolean, migas: Miga[], canasta_actual?: DatosCanasta, -- 2.48.1 From 97fb03f2993f4eec0e0aaa33a6e62eb18d90400d Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 13 Sep 2025 19:13:21 -0300 Subject: [PATCH 19/38] Agregada canasta a body de admin, para faltantes y sobrantes --- resources/js/components/admin/Body.vue | 56 ++++++++++++++------------ 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/resources/js/components/admin/Body.vue b/resources/js/components/admin/Body.vue index 53ade2e..88b9b33 100644 --- a/resources/js/components/admin/Body.vue +++ b/resources/js/components/admin/Body.vue @@ -1,27 +1,30 @@ @@ -31,10 +34,12 @@ import CaracteristicasOpcionales from "./CaracteristicasOpcionales.vue"; import TabsSecciones from "../comunes/TabsSecciones.vue"; import DropdownDescargar from "./DropdownDescargar.vue"; import TablaPedidos from "./TablaPedidos.vue"; -import { mapActions, mapGetters } from "vuex"; +import { mapActions, mapGetters, mapMutations, mapState } from "vuex"; +import Canasta from "../pedidos/Canasta.vue"; export default { name: "AdminBody", components: { + Canasta, CaracteristicasOpcionales, TabsSecciones, DropdownDescargar, @@ -50,17 +55,16 @@ export default { }, computed: { ...mapGetters('admin', ['hayPedidos']), + ...mapState('ui', ['show_faltantes_y_sobrantes']) }, methods: { - ...mapActions('admin', ['getGrupoDeCompra']), + ...mapActions('admin', ['getGrupoDeCompra', 'abrirFaltantesYSobrantes']), ...mapActions('ui', ['toast']), + ...mapMutations('ui', ['toggleFaltantesYSobrantes']), setSeccionActiva(tabId) { this.tabActiva = tabId; this.seccionActiva = tabId + "-seccion"; }, - abrirFaltantesYSobrantes() { - this.toast({ mensaje: 'Tamos implementando' }); - } }, async mounted() { await this.getGrupoDeCompra(); -- 2.48.1 From d7710c306b80fa4ad4538b914cd2ac13320ae873 Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 13 Sep 2025 19:13:42 -0300 Subject: [PATCH 20/38] Agregada accion para togglear faltantes y sobrantes desde otras stores --- resources/js/store/modules/ui/index.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/resources/js/store/modules/ui/index.ts b/resources/js/store/modules/ui/index.ts index 04c6c20..cadd0a6 100644 --- a/resources/js/store/modules/ui/index.ts +++ b/resources/js/store/modules/ui/index.ts @@ -84,6 +84,9 @@ const actions = { migasOllas({ commit }) { commit("migasOllas"); }, + toggleFaltantesYSobrantes({ commit }) { + commit("toggleFaltantesYSobrantes"); + } }; export default { -- 2.48.1 From e370ce2a0d6086ce09b9a620098b02d599d7af39 Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 13 Sep 2025 19:13:55 -0300 Subject: [PATCH 21/38] =?UTF-8?q?Agregado=20m=C3=A9todo=20para=20abrir=20f?= =?UTF-8?q?altantes=20y=20sobrantes,=20cargando=20productos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/js/store/modules/admin/index.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/js/store/modules/admin/index.ts b/resources/js/store/modules/admin/index.ts index 4da30e9..12b5de6 100644 --- a/resources/js/store/modules/admin/index.ts +++ b/resources/js/store/modules/admin/index.ts @@ -65,6 +65,10 @@ const actions = { await axios.post(`/api/grupos-de-compra/${state.grupo_de_compra_id}/${caracteristica_id}`); commit('toggleCaracteristica', { caracteristica_id: caracteristica_id }) }, + async abrirFaltantesYSobrantes({ commit, dispatch }) { + dispatch("productos/init", null, { root: true }); + dispatch("ui/toggleFaltantesYSobrantes", null, { root: true }); + } }; const getters = { -- 2.48.1 From 3e1c61da68359b8ad965485fdea68d2f57b41ed5 Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 13 Sep 2025 19:32:33 -0300 Subject: [PATCH 22/38] =?UTF-8?q?Agregada=20validaci=C3=B3n=20para=20check?= =?UTF-8?q?ear=20que=20el=20producto=20fue=20pedido?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/SubpedidoController.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/SubpedidoController.php b/app/Http/Controllers/Api/SubpedidoController.php index 82bab9f..51aa7d7 100644 --- a/app/Http/Controllers/Api/SubpedidoController.php +++ b/app/Http/Controllers/Api/SubpedidoController.php @@ -143,12 +143,17 @@ class SubpedidoController extends Controller if ($cantidad < 0) { // caso faltantes $barrio = GrupoDeCompra::find($subpedido->grupo_de_compra_id); $productosPedidos = $barrio->productosPedidos(true); - $cantidadPedida = intval($productosPedidos->where('producto_id', $producto->id)->first()->cantidad_pedida); + $productoPedido = $productosPedidos->where('producto_id', $producto->id)->first(); + if (!$productoPedido) + abort(400, "No te puede faltar algo que no pediste."); + + $cantidadPedida = intval($productoPedido->cantidad_pedida); if ($cantidadPedida + $cantidad < 0) abort(400, 'No te puede faltar más de lo que pediste'); } $subpedido->syncProducto($producto, $cantidad); + return new SubpedidoResource($subpedido); } } -- 2.48.1 From a34bfd53a89e957fcf509820c36a12bbab062d45 Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 13 Sep 2025 19:32:47 -0300 Subject: [PATCH 23/38] =?UTF-8?q?Quitado=20middleware=20de=20barrio=20para?= =?UTF-8?q?=20guardar=20pedido=20en=20sesi=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routes/web.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/web.php b/routes/web.php index 4a1740f..2d72552 100644 --- a/routes/web.php +++ b/routes/web.php @@ -29,7 +29,7 @@ Route::middleware(['auth'])->group(function () { Route::get('/user/grupo_de_compra', 'UserController@grupoDeCompra'); }); -Route::middleware(['auth', 'role:barrio'])->group(function() { +Route::middleware(['auth'])->group(function() { Route::get('/pedido', 'RouteController@main')->name('pedido'); Route::get('/pedido/sesion', 'SessionController@fetch'); Route::post('/pedido/sesion', 'SessionController@store'); -- 2.48.1 From 88deb88f046d720f09fe52e34baa7ebc76b47494 Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 13 Sep 2025 19:33:09 -0300 Subject: [PATCH 24/38] =?UTF-8?q?Agregada=20l=C3=B3gica=20para=20cargar=20?= =?UTF-8?q?pedido=20de=20faltantes=20y=20sobrantes=20del=20barrio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/js/store/modules/admin/index.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/resources/js/store/modules/admin/index.ts b/resources/js/store/modules/admin/index.ts index 12b5de6..4dee72d 100644 --- a/resources/js/store/modules/admin/index.ts +++ b/resources/js/store/modules/admin/index.ts @@ -66,7 +66,10 @@ const actions = { commit('toggleCaracteristica', { caracteristica_id: caracteristica_id }) }, async abrirFaltantesYSobrantes({ commit, dispatch }) { + const { data } = await axios.get(`/admin/${state.grupo_de_compra_id}/faltantes-y-sobrantes`) + const pedido = { pedido_id: data.id }; dispatch("productos/init", null, { root: true }); + dispatch("pedido/elegirPedido", pedido, { root: true }); dispatch("ui/toggleFaltantesYSobrantes", null, { root: true }); } }; -- 2.48.1 From 7c368c3d249559cc491ba8f66f13cb94d75d808c Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 13 Sep 2025 19:42:21 -0300 Subject: [PATCH 25/38] Cambiada logica de devoluciones en chismosa para no mostrar si el pedido no es de un nucleo --- resources/js/components/pedidos/Chismosa.vue | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/resources/js/components/pedidos/Chismosa.vue b/resources/js/components/pedidos/Chismosa.vue index 5c215a8..d86b0d2 100644 --- a/resources/js/components/pedidos/Chismosa.vue +++ b/resources/js/components/pedidos/Chismosa.vue @@ -14,7 +14,7 @@ {{ cantidad_transporte }} {{ total_transporte }} - +

Devoluciones

{{ notas_abreviadas }} @@ -49,6 +49,7 @@ import { mapMutations, mapState } from "vuex"; export default { components: { ProductoRow }, computed: { + ...mapState('login', ["rol"]), ...mapState('pedido',[ "grupo_de_compra", "productos", @@ -65,6 +66,9 @@ export default { mostrar_tabla() { return this.productos?.length !== 0; }, + mostrarDevoluciones() { + return this.rol === "barrio" && this.grupo_de_compra.devoluciones_habilitadas && !this.aprobado; + } }, methods: { ...mapMutations('ui',["toggleDevoluciones"]), -- 2.48.1 From 5f847dc9af6af33106634647b5cf39d694ec0d9d Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 13 Sep 2025 19:42:35 -0300 Subject: [PATCH 26/38] Cambiada canasta por pedidos-main para tener chismosa y migas --- resources/js/components/admin/Body.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/resources/js/components/admin/Body.vue b/resources/js/components/admin/Body.vue index 88b9b33..5f2e68d 100644 --- a/resources/js/components/admin/Body.vue +++ b/resources/js/components/admin/Body.vue @@ -1,6 +1,6 @@