From a5be67df2ebedcd49fb61a98ec5cd88d8ff1df80 Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 14 Jun 2025 12:57:22 -0300 Subject: [PATCH 1/7] Borrados middleware viejos --- app/Http/Kernel.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index ddef983..cbf821d 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -57,8 +57,6 @@ class Kernel extends HttpKernel */ protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, - 'admin' => \App\Http\Middleware\Admin::class, - 'compras' => \App\Http\Middleware\Compras::class, 'role' => \App\Http\Middleware\CheckRole::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, From 5c51653037116283887cfd10fb3b1cec7bb3bc66 Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 14 Jun 2025 12:58:01 -0300 Subject: [PATCH 2/7] Nombres para componentes --- resources/js/components/admin/Body.vue | 1 + resources/js/components/pedidos/Body.vue | 1 + 2 files changed, 2 insertions(+) diff --git a/resources/js/components/admin/Body.vue b/resources/js/components/admin/Body.vue index 63ac859..6b5110e 100644 --- a/resources/js/components/admin/Body.vue +++ b/resources/js/components/admin/Body.vue @@ -25,6 +25,7 @@ import DropdownDescargar from "./DropdownDescargar.vue"; import TablaPedidos from "./TablaPedidos.vue"; import { mapActions, mapGetters } from "vuex"; export default { + name: "AdminBody", components: { CaracteristicasOpcionales, TabsSecciones, diff --git a/resources/js/components/pedidos/Body.vue b/resources/js/components/pedidos/Body.vue index 5c23c20..706adc2 100644 --- a/resources/js/components/pedidos/Body.vue +++ b/resources/js/components/pedidos/Body.vue @@ -25,6 +25,7 @@ import NavMigas from "./NavMigas.vue"; import Chismosa from "./Chismosa.vue"; export default { + name: "PedidosBody", components: { Chismosa, NavMigas, CartelPedidoAprobado, PedidoSelect, Canasta }, computed: { ...mapGetters('pedido', ["pedidoDefinido"]), From 197b087097f35473ddf96cfea264a9e98d3fde69 Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 14 Jun 2025 12:58:21 -0300 Subject: [PATCH 3/7] Todo lo que era 'compras' cambiado a 'comisiones' --- ...ontroller.php => ComisionesController.php} | 12 ++++------ app/Http/Controllers/RouteController.php | 2 +- app/Http/Middleware/Authenticate.php | 4 ++-- resources/js/components/AppMain.vue | 11 +++++---- .../{compras => comisiones}/Body.vue | 23 ++++++++++--------- .../{compras => comisiones}/CanastaInput.vue | 2 +- .../DropdownDescargar.vue | 6 ++--- resources/js/components/login/LoginInput.vue | 2 +- resources/js/store/modules/login.js | 10 ++++---- routes/web.php | 14 +++++------ 10 files changed, 43 insertions(+), 43 deletions(-) rename app/Http/Controllers/{ComprasController.php => ComisionesController.php} (93%) rename resources/js/components/{compras => comisiones}/Body.vue (74%) rename resources/js/components/{compras => comisiones}/CanastaInput.vue (96%) rename resources/js/components/{compras => comisiones}/DropdownDescargar.vue (84%) diff --git a/app/Http/Controllers/ComprasController.php b/app/Http/Controllers/ComisionesController.php similarity index 93% rename from app/Http/Controllers/ComprasController.php rename to app/Http/Controllers/ComisionesController.php index 93ef20a..2849d45 100644 --- a/app/Http/Controllers/ComprasController.php +++ b/app/Http/Controllers/ComisionesController.php @@ -9,12 +9,13 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\BinaryFileResponse; -class ComprasController +class ComisionesController { const CANASTAS_PATH = 'csv/canastas/'; - public function indexPedidos() { - return view('compras_pedidos'); + public function show() + { + return view('auth/login'); } public function descargarPedidos(): BinaryFileResponse @@ -35,11 +36,6 @@ class ComprasController GrupoDeCompra::exportarPedidosBarrialesAPdf(); } - public function show() - { - return view('auth/login'); - } - public function cargarCanasta(Request $request): JsonResponse { $request->validate([ diff --git a/app/Http/Controllers/RouteController.php b/app/Http/Controllers/RouteController.php index 3d29cdc..e5b4a57 100644 --- a/app/Http/Controllers/RouteController.php +++ b/app/Http/Controllers/RouteController.php @@ -22,7 +22,7 @@ class RouteController extends Controller case $admin->id: return redirect('/admin'); case $comision->id: - return redirect('/compras'); + return redirect('/comisiones'); default: abort(400, 'Rol de usuario invalido'); } diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 265a157..7eabcdf 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -18,8 +18,8 @@ class Authenticate extends Middleware $path = $request->path(); if (preg_match('~^admin.*~i', $path)) return route('admin.login'); - if (preg_match('~^compras.*~i', $path)) - return route('compras.login'); + if (preg_match('~^comisiones.*~i', $path)) + return route('comisiones.login'); return route('login'); } } diff --git a/resources/js/components/AppMain.vue b/resources/js/components/AppMain.vue index ffd0e0e..6d35896 100644 --- a/resources/js/components/AppMain.vue +++ b/resources/js/components/AppMain.vue @@ -1,14 +1,17 @@ diff --git a/resources/js/store/modules/ui.js b/resources/js/store/modules/ui.js index a8b6c91..02367ec 100644 --- a/resources/js/store/modules/ui.js +++ b/resources/js/store/modules/ui.js @@ -2,9 +2,13 @@ const state = { show_chismosa: false, show_devoluciones: false, migas: [{ nombre: 'Pedidos', action: 'pedido/resetear' }], + canasta_actual: null, }; const mutations = { + setCanastaActual(state, { canasta }) { + state.canasta_actual = canasta; + }, toggleChismosa(state) { state.show_chismosa = !state.show_chismosa; }, @@ -25,6 +29,10 @@ const mutations = { }; const actions = { + async getCanastaActual({ commit }) { + const response = await axios.get('/api/canasta-actual'); + commit("setCanastaActual", { canasta: response.data }); + }, clickMiga({ dispatch }, { miga }) { let dropWhile = (array, pred) => { let result = array.slice(0); From a38bceab82a840c7f05c8bb1f2b77a34f83bc038 Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 14 Jun 2025 15:35:41 -0300 Subject: [PATCH 6/7] Usando storage_path en vez de resource_path --- .gitignore | 2 ++ app/Helpers/CanastaHelper.php | 7 ++++++- app/Helpers/CsvHelper.php | 9 +++++++-- app/Http/Controllers/AdminController.php | 4 ++-- app/Http/Controllers/ComisionesController.php | 6 +++--- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 7c37daf..68da81a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,8 @@ yarn-error.log .idea /resources/csv/exports/*.csv /resources/csv/canastas/*.csv +/storage/csv/exports/*.csv +/storage/csv/canastas/*.csv /public/css/ /public/js/ /public/mix-manifest.json diff --git a/app/Helpers/CanastaHelper.php b/app/Helpers/CanastaHelper.php index 35fa7f0..bda7f71 100644 --- a/app/Helpers/CanastaHelper.php +++ b/app/Helpers/CanastaHelper.php @@ -7,6 +7,7 @@ use App\CanastaLog; use DatabaseSeeder; use Illuminate\Support\Arr; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\File; use Illuminate\Support\Str; class CanastaHelper @@ -31,9 +32,13 @@ class CanastaHelper } public static function guardarCanasta($data, $path): string { + if (!File::exists(storage_path('csv/canastas'))) { + File::makeDirectory(storage_path('csv/canastas'), 0755, true); + } + $nombre = $data->getClientOriginalName(); - $data->move(resource_path($path), $nombre); + $data->move(storage_path($path), $nombre); self::log($path . $nombre, self::ARCHIVO_SUBIDO); diff --git a/app/Helpers/CsvHelper.php b/app/Helpers/CsvHelper.php index 95f2cfd..5686b96 100644 --- a/app/Helpers/CsvHelper.php +++ b/app/Helpers/CsvHelper.php @@ -2,6 +2,7 @@ namespace App\Helpers; +use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Log; use Iterator; use League\Csv\CannotInsertRecord; @@ -13,7 +14,7 @@ use League\Csv\Writer; class CsvHelper { public static function getRecords($filePath): Iterator { - $csv = Reader::createFromPath(resource_path($filePath)); + $csv = Reader::createFromPath(storage_path($filePath)); try { $csv->setDelimiter("|"); $csv->setEnclosure("'"); @@ -27,8 +28,12 @@ class CsvHelper public static function generarCsv($filePath, $contenido, $headers = null): void { + if (!File::exists(storage_path('csv/exports'))) { + File::makeDirectory(storage_path('csv/exports'), 0755, true); + } + try { - $writer = Writer::createFromPath(resource_path($filePath), 'w'); + $writer = Writer::createFromPath(storage_path($filePath), 'w'); if ($headers) { $writer->insertOne($headers); } diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index c7312df..3f79129 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -23,14 +23,14 @@ class AdminController extends Controller public function exportarPedidoACSV(GrupoDeCompra $gdc): BinaryFileResponse { $gdc->exportarPedidoEnCSV(); - $file = resource_path('csv/exports/'.$gdc->nombre.'.csv'); + $file = storage_path('csv/exports/'.$gdc->nombre.'.csv'); return response()->download($file); } public function exportarPedidoConNucleosACSV(GrupoDeCompra $gdc): BinaryFileResponse { $gdc->exportarPedidoConNucleosEnCSV(); - $file = resource_path('csv/exports/'.$gdc->nombre.'-completo.csv'); + $file = storage_path('csv/exports/'.$gdc->nombre.'-completo.csv'); return response()->download($file); } } diff --git a/app/Http/Controllers/ComisionesController.php b/app/Http/Controllers/ComisionesController.php index 2849d45..c42c0e5 100644 --- a/app/Http/Controllers/ComisionesController.php +++ b/app/Http/Controllers/ComisionesController.php @@ -21,14 +21,14 @@ class ComisionesController public function descargarPedidos(): BinaryFileResponse { Producto::planillaTotales(); - $file = resource_path('csv/exports/pedidos-por-barrio.csv'); + $file = storage_path('csv/exports/pedidos-por-barrio.csv'); return response()->download($file); } public function descargarNotas(): BinaryFileResponse { Producto::planillaNotas(); - $file = resource_path('csv/exports/notas-por-barrio.csv'); + $file = storage_path('csv/exports/notas-por-barrio.csv'); return response()->download($file); } @@ -52,7 +52,7 @@ class ComisionesController public function descargarCanastaEjemplo(): BinaryFileResponse { - $file = resource_path('csv/productos.csv'); + $file = storage_path('csv/productos.csv'); return response()->download($file); } } From 17148d73f8720cf72e3e3a24243b7843d2d6ef1d Mon Sep 17 00:00:00 2001 From: ale Date: Sat, 14 Jun 2025 15:55:56 -0300 Subject: [PATCH 7/7] Agregada fecha a nombre de archivos exportados (csv y pdf) --- app/GrupoDeCompra.php | 12 +++++++---- app/Http/Controllers/AdminController.php | 20 +++++++++++++++---- app/Http/Controllers/ComisionesController.php | 20 +++++++++++++++---- app/Producto.php | 6 ++++-- 4 files changed, 44 insertions(+), 14 deletions(-) diff --git a/app/GrupoDeCompra.php b/app/GrupoDeCompra.php index 12f789d..bb13a9f 100644 --- a/app/GrupoDeCompra.php +++ b/app/GrupoDeCompra.php @@ -111,7 +111,8 @@ class GrupoDeCompra extends Model public function exportarPedidosAPdf() { $subpedidos = $this->pedidosAprobados(); - PdfHelper::exportarPedidos($this->nombre . '.pdf', $subpedidos); + $fecha = now()->format('Y-m-d'); + PdfHelper::exportarPedidos($this->nombre . '-' . $fecha . '.pdf', $subpedidos); } function pedidoParaPdf(): array @@ -144,7 +145,8 @@ class GrupoDeCompra extends Model public static function exportarPedidosBarrialesAPdf() { $barrios = GrupoDeCompra::barriosMenosPrueba()->get(); - PdfHelper::exportarPedidos('pedidos_por_barrio.pdf', $barrios); + $fecha = now()->format('Y-m-d'); + PdfHelper::exportarPedidos('pedidos_por_barrio-' . $fecha . '.pdf', $barrios); } static function filaVacia(string $product, int $columns): array @@ -178,7 +180,8 @@ class GrupoDeCompra extends Model { $records = $this->generarColumnaCantidades(); - CsvHelper::generarCsv('csv/exports/' . $this->nombre . '.csv', $records); + $fecha = now()->format('Y-m-d'); + CsvHelper::generarCsv('csv/exports/' . $this->nombre . '-' . $fecha . '.csv', $records); } public function generarColumnaCantidades(): array @@ -235,7 +238,8 @@ class GrupoDeCompra extends Model } array_splice($records, 0, 0, array($nucleos)); - CsvHelper::generarCsv('csv/exports/' . $this->nombre . '-completo.csv', $records); + $fecha = now()->format('Y-m-d'); + CsvHelper::generarCsv('csv/exports/' . $this->nombre . '-completo-' . $fecha . '.csv', $records); } public function agregarCantidad($pedido, $id, array $records, $fila, int $i): array diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index 3f79129..3073578 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -23,14 +23,26 @@ class AdminController extends Controller public function exportarPedidoACSV(GrupoDeCompra $gdc): BinaryFileResponse { $gdc->exportarPedidoEnCSV(); - $file = storage_path('csv/exports/'.$gdc->nombre.'.csv'); - return response()->download($file); + $pattern = storage_path('csv/exports/'. $gdc->nombre . '-*.csv'); + $files = glob($pattern); + + usort($files, function ($a, $b) { + return filemtime($b) <=> filemtime($a); + }); + + return response()->download($files[0]); } public function exportarPedidoConNucleosACSV(GrupoDeCompra $gdc): BinaryFileResponse { $gdc->exportarPedidoConNucleosEnCSV(); - $file = storage_path('csv/exports/'.$gdc->nombre.'-completo.csv'); - return response()->download($file); + $pattern = storage_path('csv/exports/'.$gdc->nombre.'-completo-*.csv'); + $files = glob($pattern); + + usort($files, function ($a, $b) { + return filemtime($b) <=> filemtime($a); + }); + + return response()->download($files[0]); } } diff --git a/app/Http/Controllers/ComisionesController.php b/app/Http/Controllers/ComisionesController.php index c42c0e5..9ffd3f1 100644 --- a/app/Http/Controllers/ComisionesController.php +++ b/app/Http/Controllers/ComisionesController.php @@ -21,15 +21,27 @@ class ComisionesController public function descargarPedidos(): BinaryFileResponse { Producto::planillaTotales(); - $file = storage_path('csv/exports/pedidos-por-barrio.csv'); - return response()->download($file); + $pattern = storage_path('csv/exports/pedidos-por-barrio-*.csv'); + $files = glob($pattern); + + usort($files, function ($a, $b) { + return filemtime($b) <=> filemtime($a); + }); + + return response()->download($files[0]); } public function descargarNotas(): BinaryFileResponse { Producto::planillaNotas(); - $file = storage_path('csv/exports/notas-por-barrio.csv'); - return response()->download($file); + $pattern = storage_path('csv/exports/notas-por-barrio-*.csv'); + $files = glob($pattern); + + usort($files, function ($a, $b) { + return filemtime($b) <=> filemtime($a); + }); + + return response()->download($files[0]); } public function pdf() { diff --git a/app/Producto.php b/app/Producto.php index 15c19ae..505909d 100644 --- a/app/Producto.php +++ b/app/Producto.php @@ -109,7 +109,8 @@ class Producto extends Model $planilla[$filaTransporte][] = $cantidad; } - CsvHelper::generarCsv('csv/exports/pedidos-por-barrio.csv', $planilla, $headers); + $fecha = now()->format('Y-m-d'); + CsvHelper::generarCsv('csv/exports/pedidos-por-barrio- ' . $fecha . '.csv', $planilla, $headers); } public static function notasPorBarrio(): Collection @@ -146,6 +147,7 @@ class Producto extends Model $planilla[] = $fila; } - CsvHelper::generarCsv('csv/exports/notas-por-barrio.csv', $planilla, $headers); + $fecha = now()->format('Y-m-d'); + CsvHelper::generarCsv('csv/exports/notas-por-barrio-' . $fecha . '.csv', $planilla, $headers); } }