From 4b2ed9f90ea8cd79a2bce3653d0c1131264f323c Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Sat, 21 Dec 2024 13:20:34 -0300 Subject: [PATCH 01/23] Generalizacion de tab-secciones --- resources/js/components/admin/Body.vue | 5 ++++- .../js/components/admin/TabsSecciones.vue | 20 +++++-------------- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/resources/js/components/admin/Body.vue b/resources/js/components/admin/Body.vue index 5010fa6..32419ec 100644 --- a/resources/js/components/admin/Body.vue +++ b/resources/js/components/admin/Body.vue @@ -1,6 +1,6 @@ <template> <div class="block ml-3 mr-3 is-max-widescreen is-max-desktop"> - <admin-tabs-secciones></admin-tabs-secciones> + <admin-tabs-secciones :tabs="tabs" :tabInicial="tabActiva"></admin-tabs-secciones> <div class="block" id="pedidos-seccion" :class="seccionActiva === 'pedidos-seccion' ? 'is-active' : 'is-hidden'"> <div class="block pb-6" id="pedidos-tabla-y-dropdown" v-show="hayPedidos"> @@ -52,6 +52,9 @@ export default { pedidos: [], bonosDeTransporte: 0, totalBonosBarriales: 0, + tabs: [{ id: "pedidos", nombre: "Pedidos" }, + { id: "bonos", nombre: "Bonos" }, + { id: "caracteristicas", nombre: "Caracteristicas opcionales" }], tabActiva: "pedidos", seccionActiva: "pedidos-seccion", } diff --git a/resources/js/components/admin/TabsSecciones.vue b/resources/js/components/admin/TabsSecciones.vue index 0444b08..7a2f88a 100644 --- a/resources/js/components/admin/TabsSecciones.vue +++ b/resources/js/components/admin/TabsSecciones.vue @@ -19,23 +19,13 @@ <script> export default { + props: { + tabs: Array, + tabInicial: String, + }, data() { return { - tabActiva: "pedidos", - tabs: [ - { - id: "pedidos", - nombre: "Pedidos" - }, - { - id: "bonos", - nombre: "Bonos" - }, - { - id: "caracteristicas", - nombre: "Caracteristicas opcionales" - } - ] + tabActiva: this.tabInicial, } }, methods: { From bddaf223e4076901c25d076739cb7532841e7b4d Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Sat, 21 Dec 2024 13:21:39 -0300 Subject: [PATCH 02/23] tab-secciones movida a comunes --- resources/js/components/admin/Body.vue | 4 ++-- resources/js/components/{admin => comunes}/TabsSecciones.vue | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename resources/js/components/{admin => comunes}/TabsSecciones.vue (100%) diff --git a/resources/js/components/admin/Body.vue b/resources/js/components/admin/Body.vue index 32419ec..1b4b8c5 100644 --- a/resources/js/components/admin/Body.vue +++ b/resources/js/components/admin/Body.vue @@ -1,6 +1,6 @@ <template> <div class="block ml-3 mr-3 is-max-widescreen is-max-desktop"> - <admin-tabs-secciones :tabs="tabs" :tabInicial="tabActiva"></admin-tabs-secciones> + <comunes-tabs-secciones :tabs="tabs" :tabInicial="tabActiva"></comunes-tabs-secciones> <div class="block" id="pedidos-seccion" :class="seccionActiva === 'pedidos-seccion' ? 'is-active' : 'is-hidden'"> <div class="block pb-6" id="pedidos-tabla-y-dropdown" v-show="hayPedidos"> @@ -34,7 +34,7 @@ <script> import CaracteristicasOpcionales from "./CaracteristicasOpcionales.vue"; -import TabsSecciones from "./TabsSecciones.vue"; +import TabsSecciones from "../comunes/TabsSecciones.vue"; import DropdownDescargar from "./DropdownDescargar.vue"; import TablaPedidos from "./TablaPedidos.vue"; import TablaBonos from "./TablaBonos.vue"; diff --git a/resources/js/components/admin/TabsSecciones.vue b/resources/js/components/comunes/TabsSecciones.vue similarity index 100% rename from resources/js/components/admin/TabsSecciones.vue rename to resources/js/components/comunes/TabsSecciones.vue From 22cbac14f1428d1cac9f4cdc512a2e4fa696d113 Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Sat, 21 Dec 2024 13:29:14 -0300 Subject: [PATCH 03/23] =?UTF-8?q?Pesta=C3=B1as=20para=20body=20de=20compra?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/js/components/compras/Body.vue | 74 ++++++++++++++++-------- 1 file changed, 51 insertions(+), 23 deletions(-) diff --git a/resources/js/components/compras/Body.vue b/resources/js/components/compras/Body.vue index 8ba4d5f..47df9fb 100644 --- a/resources/js/components/compras/Body.vue +++ b/resources/js/components/compras/Body.vue @@ -1,42 +1,70 @@ <template> - <div class="container is-fluid has-text-centered"> - <div class="block"> - <div class="field"> - <p class="control"> - <a href="/compras/pedidos/descargar" class="button"> + <div class="block ml-3 mr-3 is-max-widescreen is-max-desktop"> + <comunes-tabs-secciones :tabs="tabs" :tabInicial="tabActiva"></comunes-tabs-secciones> + <div class="block" id="pedidos-compras-seccion" + :class="seccionActiva === 'pedidos-compras-seccion' ? 'is-active' : 'is-hidden'"> + <div class="block"> + <div class="field"> + <p class="control"> + <a href="/compras/pedidos/descargar" class="button"> <span class="icon is-small"> <i class="fas fa-download"></i> </span> - <span>Descargar planilla de totales</span> - </a> - </p> - </div> - <div class="field"> - <p class="control"> - <a href="/compras/pedidos/notas" class="button"> + <span>Descargar planilla de totales</span> + </a> + </p> + </div> + <div class="field"> + <p class="control"> + <a href="/compras/pedidos/notas" class="button"> <span class="icon is-small"> <i class="fas fa-sticky-note"></i> </span> - <span>Descargar planilla de notas</span> - </a> - </p> - </div> - <div class="field"> - <p class="control"> - <a href="/compras/pedidos/transporte" class="button"> + <span>Descargar planilla de notas</span> + </a> + </p> + </div> + <div class="field"> + <p class="control"> + <a href="/compras/pedidos/transporte" class="button"> <span class="icon is-small"> <i class="fa fa-truck"></i> </span> - <span>Descargar planilla de transporte</span> - </a> - </p> + <span>Descargar planilla de transporte</span> + </a> + </p> + </div> + </div> + </div> + <div class="block pb-6" id="canasta-compras-seccion" + :class="seccionActiva === 'canasta-compras-seccion' ? 'is-active' : 'is-hidden'"> + <div class="block" id="canasta-compras-seccion"> + <p> Todavía no hay nada por acá </p> </div> </div> </div> </template> <script> -export default { +import TabsSecciones from "../comunes/TabsSecciones.vue"; +export default { + components: { + TabsSecciones, + }, + data() { + return { + tabs: [{ id: "pedidos-compras", nombre: "Pedidos" }, + { id: "canasta-compras", nombre: "Canasta" }], + tabActiva: "pedidos-compras", + seccionActiva: "pedidos-compras-seccion", + } + }, + methods: { + setSeccionActiva(tabId) { + this.tabActiva = tabId; + this.seccionActiva = tabId + "-seccion"; + }, + } } </script> From 92782be7f694e4acdade846721a7795817ad4ec4 Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Sat, 21 Dec 2024 13:48:40 -0300 Subject: [PATCH 04/23] Descargas movidas a dropdown --- resources/js/components/compras/Body.vue | 37 +++----------- .../components/compras/DropdownDescargar.vue | 50 +++++++++++++++++++ 2 files changed, 56 insertions(+), 31 deletions(-) create mode 100644 resources/js/components/compras/DropdownDescargar.vue diff --git a/resources/js/components/compras/Body.vue b/resources/js/components/compras/Body.vue index 47df9fb..23e9f0a 100644 --- a/resources/js/components/compras/Body.vue +++ b/resources/js/components/compras/Body.vue @@ -3,37 +3,9 @@ <comunes-tabs-secciones :tabs="tabs" :tabInicial="tabActiva"></comunes-tabs-secciones> <div class="block" id="pedidos-compras-seccion" :class="seccionActiva === 'pedidos-compras-seccion' ? 'is-active' : 'is-hidden'"> - <div class="block"> - <div class="field"> - <p class="control"> - <a href="/compras/pedidos/descargar" class="button"> - <span class="icon is-small"> - <i class="fas fa-download"></i> - </span> - <span>Descargar planilla de totales</span> - </a> - </p> - </div> - <div class="field"> - <p class="control"> - <a href="/compras/pedidos/notas" class="button"> - <span class="icon is-small"> - <i class="fas fa-sticky-note"></i> - </span> - <span>Descargar planilla de notas</span> - </a> - </p> - </div> - <div class="field"> - <p class="control"> - <a href="/compras/pedidos/transporte" class="button"> - <span class="icon is-small"> - <i class="fa fa-truck"></i> - </span> - <span>Descargar planilla de transporte</span> - </a> - </p> - </div> + <div class="block pb-6" id="pedidos-compras-tabla-y-dropdown"> + <compras-dropdown-descargar> + </compras-dropdown-descargar> </div> </div> <div class="block pb-6" id="canasta-compras-seccion" @@ -47,10 +19,12 @@ <script> import TabsSecciones from "../comunes/TabsSecciones.vue"; +import DropdownDescargar from "./DropdownDescargar.vue"; export default { components: { TabsSecciones, + DropdownDescargar, }, data() { return { @@ -58,6 +32,7 @@ export default { { id: "canasta-compras", nombre: "Canasta" }], tabActiva: "pedidos-compras", seccionActiva: "pedidos-compras-seccion", + hayAprobados: true, } }, methods: { diff --git a/resources/js/components/compras/DropdownDescargar.vue b/resources/js/components/compras/DropdownDescargar.vue new file mode 100644 index 0000000..a37d916 --- /dev/null +++ b/resources/js/components/compras/DropdownDescargar.vue @@ -0,0 +1,50 @@ +<template> + <div class="buttons is-right"> + <div class="dropdown" :class="{'is-active': dropdownActivo}" @mouseleave="dropdownActivo = false"> + <div class="dropdown-trigger"> + <button class="button" aria-haspopup="true" aria-controls="dropdown-menu" :disabled="!hayAprobados" @click="dropdownActivo = !dropdownActivo"> + <span class="icon is-small"> + <i class="fas fa-download"></i> + </span> + <span>Descargar planillas</span> + <span class="icon is-small"> + <i class="fas fa-angle-down" aria-hidden="true"></i> + </span> + </button> + </div> + <div class="dropdown-menu" id="dropdown-menu" role="menu"> + <div class="dropdown-content"> + <a href="/compras/pedidos/descargar" class="dropdown-item"> + Pedidos por barrio + </a> + <a href="/compras/pedidos/notas" class="dropdown-item"> + Notas por barrio + </a> + <a href="/compras/pedidos/transporte" class="dropdown-item"> + Transporte por barrio + </a> + </div> + </div> + </div> + </div> +</template> + +<script> +export default { + data() { + return { + dropdownActivo: false + } + }, + computed: { + hayAprobados: function() { + return this.$parent.hayAprobados; + } + }, + +} +</script> + +<style> + +</style> From bea8de2c8cdbd8c93224983e5c82f716fa8cc979 Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Sat, 21 Dec 2024 13:56:45 -0300 Subject: [PATCH 05/23] Siempre habilitado --- resources/js/components/compras/DropdownDescargar.vue | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/resources/js/components/compras/DropdownDescargar.vue b/resources/js/components/compras/DropdownDescargar.vue index a37d916..5929613 100644 --- a/resources/js/components/compras/DropdownDescargar.vue +++ b/resources/js/components/compras/DropdownDescargar.vue @@ -2,7 +2,7 @@ <div class="buttons is-right"> <div class="dropdown" :class="{'is-active': dropdownActivo}" @mouseleave="dropdownActivo = false"> <div class="dropdown-trigger"> - <button class="button" aria-haspopup="true" aria-controls="dropdown-menu" :disabled="!hayAprobados" @click="dropdownActivo = !dropdownActivo"> + <button class="button" aria-haspopup="true" aria-controls="dropdown-menu" @click="dropdownActivo = !dropdownActivo"> <span class="icon is-small"> <i class="fas fa-download"></i> </span> @@ -36,12 +36,6 @@ export default { dropdownActivo: false } }, - computed: { - hayAprobados: function() { - return this.$parent.hayAprobados; - } - }, - } </script> From 5a4b933f11daac436e72e97d67be079e74039fec Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Sat, 21 Dec 2024 14:17:47 -0300 Subject: [PATCH 06/23] Agregado csv input para canasta --- resources/js/components/compras/Body.vue | 8 ++- .../js/components/compras/CanastaInput.vue | 69 +++++++++++++++++++ 2 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 resources/js/components/compras/CanastaInput.vue diff --git a/resources/js/components/compras/Body.vue b/resources/js/components/compras/Body.vue index 23e9f0a..9828a73 100644 --- a/resources/js/components/compras/Body.vue +++ b/resources/js/components/compras/Body.vue @@ -11,7 +11,9 @@ <div class="block pb-6" id="canasta-compras-seccion" :class="seccionActiva === 'canasta-compras-seccion' ? 'is-active' : 'is-hidden'"> <div class="block" id="canasta-compras-seccion"> - <p> Todavía no hay nada por acá </p> + <div class="buttons is-right"> + <compras-canasta-input></compras-canasta-input> + </div> </div> </div> </div> @@ -20,11 +22,13 @@ <script> import TabsSecciones from "../comunes/TabsSecciones.vue"; import DropdownDescargar from "./DropdownDescargar.vue"; +import CanastaInput from "./CanastaInput.vue"; export default { components: { TabsSecciones, DropdownDescargar, + CanastaInput, }, data() { return { @@ -32,7 +36,7 @@ export default { { id: "canasta-compras", nombre: "Canasta" }], tabActiva: "pedidos-compras", seccionActiva: "pedidos-compras-seccion", - hayAprobados: true, + archivo: undefined, } }, methods: { diff --git a/resources/js/components/compras/CanastaInput.vue b/resources/js/components/compras/CanastaInput.vue new file mode 100644 index 0000000..22bc687 --- /dev/null +++ b/resources/js/components/compras/CanastaInput.vue @@ -0,0 +1,69 @@ +<template> + <div class="block"> + <div class="file has-name is-right"> + <label class="file-label"> + <input + class="file-input" + type="file" + name="canasta" + @change="onFileChange" + /> + <span class="file-cta"> + <span class="file-icon"> + <i class="fas fa-cloud-upload-alt"></i> + </span> + <span class="file-label">Subir canasta</span> + </span> + <span class="file-name" v-if="archivo"> + {{ archivo.nombre }} + </span> + </label> + </div> + </div> +</template> + +<script> +import axios from "axios"; + +export default { + name: "CanastaInput", + data() { + return { + archivo: null, + cargando: false, + }; + }, + methods: { + async onFileChange(event) { + const archivo = event.target.files[0]; + if (archivo && archivo.type === "text/csv") { + this.archivo = { file: archivo, nombre: archivo.name }; + const formData = new FormData(); + formData.append("file", this.archivo.file); + + try { + this.cargando = true; + const response = await axios.post("/cargar-canasta", formData, { + headers: { + "Content-Type": "multipart/form-data", + }, + }); + this.$root.$toast(response.data.message || "Canasta cargada!"); + } catch (error) { + this.$root.$toast(error.response?.data?.message || "Hubo errores."); + } finally { + this.cargando = false; + this.archivo = null; + } + } else { + this.$root.$toast("La canasta debe ser .CSV") + this.archivo = null; + } + }, + }, +}; +</script> + +<style scoped> + +</style> From 131bf33a73b8f0f88f0dfcec366be419ca936d08 Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Sat, 21 Dec 2024 14:29:48 -0300 Subject: [PATCH 07/23] Agregada ruta y logica para cargar canastas --- .gitignore | 1 + app/Http/Controllers/ComprasController.php | 16 ++++++++++++++ .../js/components/compras/CanastaInput.vue | 22 +++++++++---------- routes/web.php | 1 + 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index 6de1c86..7c37daf 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ npm-debug.log yarn-error.log .idea /resources/csv/exports/*.csv +/resources/csv/canastas/*.csv /public/css/ /public/js/ /public/mix-manifest.json diff --git a/app/Http/Controllers/ComprasController.php b/app/Http/Controllers/ComprasController.php index 48e9ef4..48ee549 100644 --- a/app/Http/Controllers/ComprasController.php +++ b/app/Http/Controllers/ComprasController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use App\GrupoDeCompra; use App\Producto; +use Illuminate\Http\Request; class ComprasController { @@ -33,4 +34,19 @@ class ComprasController { return view('auth/compras_login'); } + + public function cargarCanasta(Request $request) + { + $request->validate([ + 'data' => 'required|file|mimes:csv,txt|max:2048', + ]); + + $archivo = $request->file('data'); + $path = resource_path('/csv/canastas/'); + $archivo->move($path, $archivo->getClientOriginalName()); + + return response()->json([ + 'message' => 'Canasta cargada exitosamente', + ], 200); + } } diff --git a/resources/js/components/compras/CanastaInput.vue b/resources/js/components/compras/CanastaInput.vue index 22bc687..0cb55b2 100644 --- a/resources/js/components/compras/CanastaInput.vue +++ b/resources/js/components/compras/CanastaInput.vue @@ -6,14 +6,14 @@ class="file-input" type="file" name="canasta" - @change="onFileChange" + @change="archivoSubido" /> <span class="file-cta"> - <span class="file-icon"> - <i class="fas fa-cloud-upload-alt"></i> - </span> - <span class="file-label">Subir canasta</span> - </span> + <span class="file-icon"> + <i class="fas fa-cloud-upload-alt"></i> + </span> + <span class="file-label">Subir canasta</span> + </span> <span class="file-name" v-if="archivo"> {{ archivo.nombre }} </span> @@ -34,21 +34,21 @@ export default { }; }, methods: { - async onFileChange(event) { + async archivoSubido(event) { const archivo = event.target.files[0]; if (archivo && archivo.type === "text/csv") { - this.archivo = { file: archivo, nombre: archivo.name }; + this.archivo = {data: archivo, nombre: archivo.name}; const formData = new FormData(); - formData.append("file", this.archivo.file); + formData.append("data", this.archivo.data); try { this.cargando = true; - const response = await axios.post("/cargar-canasta", formData, { + const response = await axios.post("/compras/canasta", formData, { headers: { "Content-Type": "multipart/form-data", }, }); - this.$root.$toast(response.data.message || "Canasta cargada!"); + this.$root.$toast(response.data.message || "Canasta cargada exitosamente"); } catch (error) { this.$root.$toast(error.response?.data?.message || "Hubo errores."); } finally { diff --git a/routes/web.php b/routes/web.php index d6f239f..8604d18 100644 --- a/routes/web.php +++ b/routes/web.php @@ -83,4 +83,5 @@ Route::middleware(['compras'])->group( function() { Route::get('/compras/pedidos/descargar', 'ComprasController@descargarPedidos')->name('compras.pedidos.descargar'); Route::get('/compras/pedidos/notas', 'ComprasController@descargarNotas')->name('compras.pedidos.descargar'); Route::get('/compras/pedidos/transporte', 'ComprasController@descargarTransporte')->name('compras.pedidos.descargar'); + Route::post('/compras/canasta', 'ComprasController@cargarCanasta')->name('compras.canasta'); }); From ac4d5895be4b9e178627d6e7708abd7ab0c40437 Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Sat, 21 Dec 2024 14:56:53 -0300 Subject: [PATCH 08/23] Logica de trabajo con CSV y carga movida a CanastaHelper.php --- app/Helpers/CanastaHelper.php | 97 ++++++++++++++++++++++++++++++++ database/seeds/CanastaSeeder.php | 83 +-------------------------- 2 files changed, 100 insertions(+), 80 deletions(-) create mode 100644 app/Helpers/CanastaHelper.php diff --git a/app/Helpers/CanastaHelper.php b/app/Helpers/CanastaHelper.php new file mode 100644 index 0000000..1433781 --- /dev/null +++ b/app/Helpers/CanastaHelper.php @@ -0,0 +1,97 @@ +<?php + +namespace App\Helpers; + +use App\Proveedor; +use DatabaseSeeder; +use Illuminate\Support\Arr; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Str; +use League\Csv\Reader; + +class CanastaHelper +{ + const FILA_HEADER = "Tipo"; + const ULTIMA_FILA = "TOTAL"; + + public static function cargarCanasta($archivo) { + $csv = Reader::createFromPath(resource_path($archivo), 'r'); + $csv->setDelimiter("|"); + $iHeader = self::obtenerIndiceDeHeader($csv); + $csv->setHeaderOffset($iHeader); + $registros = $csv->getRecords(); + + $toInsert = []; + $categoria = ''; + foreach($registros as $i => $registro){ + //filas que están arriba del header + if ($i <= $iHeader){ + continue; + } + + //finalizar + if ($registro[self::FILA_HEADER] == self::ULTIMA_FILA) { + break; + } + + //filas que no tienen tipo + if (!Arr::has($registro,self::FILA_HEADER)|| trim($registro[self::FILA_HEADER]) == ''){ + var_dump("no hay tipo en la fila " . $i); + continue; + } + + //saltear bono de transporte + if ($registro[self::FILA_HEADER] == "T"){ + continue; + } + + //obtener categoria + if ($registro['Producto'] == '') { + //es la pregunta de la copa? + if (Str::contains($registro[self::FILA_HEADER],"¿")) { continue; } + $categoria = $registro[self::FILA_HEADER]; + continue; + } + + //completar producto + $toInsert[] = [ + 'fila' => $i, + 'categoria' => $categoria, + 'nombre' => trim(str_replace('*', ' ',$registro['Producto'])), + 'precio' => $registro['Precio'], + 'proveedor_id' => self::obtenerProveedor($registro['Producto']), + 'bono' => $registro[self::FILA_HEADER] == "B", + 'requiere_notas'=> $registro[self::FILA_HEADER] =="PTC", + ]; + } + + foreach (array_chunk($toInsert,DatabaseSeeder::CHUNK_SIZE) as $chunk) + { + DB::table('productos')->insert($chunk); + } + } + + private static function obtenerIndiceDeHeader($csv){ + $registros = $csv->getRecords(); + $iheader = 0; + foreach ($registros as $i => $registro){ + if (strtolower($registro[0]) == strtolower(self::FILA_HEADER)) { + $iheader = $i; + break; + } + } + return $iheader; + } + + private static function obtenerProveedor($nombre) { + $result = null; + if (Str::contains($nombre,"*")){ + $result = Proveedor::firstOrCreate([ + 'nombre' => 'Proveedor de economía solidaria', + 'economia_solidaria' => 1, + 'nacional' => 1 + ])->id; + } + return $result; + } +} diff --git a/database/seeds/CanastaSeeder.php b/database/seeds/CanastaSeeder.php index 0edc5b5..90775b0 100644 --- a/database/seeds/CanastaSeeder.php +++ b/database/seeds/CanastaSeeder.php @@ -1,13 +1,13 @@ <?php +use App\Helpers\CanastaHelper; use Illuminate\Database\Seeder; use League\Csv\Reader; use App\Proveedor; class CanastaSeeder extends Seeder { - const FILA_HEADER = "Tipo"; - const ULTIMA_FILA = "TOTAL"; + const ARCHIVO_DEFAULT = 'csv/productos.csv'; /** * Run the database seeds. @@ -16,83 +16,6 @@ class CanastaSeeder extends Seeder */ public function run() { - $csv = Reader::createFromPath(resource_path('csv/productos.csv'), 'r'); - $csv->setDelimiter("|"); - $iHeader = $this->obtenerIndiceDeHeader($csv); - $csv->setHeaderOffset($iHeader); - $registros = $csv->getRecords(); - - $toInsert = []; - $categoria = ''; - foreach($registros as $i => $registro){ - //filas que están arriba del header - if ($i <= $iHeader){ - continue; - } - - //finalizar - if ($registro[$this::FILA_HEADER] == $this::ULTIMA_FILA){ - break; - } - - //filas que no tienen tipo - if (!Arr::has($registro,$this::FILA_HEADER)|| trim($registro[$this::FILA_HEADER]) == ''){ - var_dump("no hay tipo en la fila " . $i); - continue; - } - - //saltear bono de transporte - if ($registro[$this::FILA_HEADER] == "T"){ - continue; - } - - //obtener categoria - if ($registro['Producto'] == '') { - //es la pregunta de la copa? - if (Str::contains($registro[$this::FILA_HEADER],"¿")) { continue; } - $categoria = $registro[$this::FILA_HEADER]; - continue; - } - - //completar producto - $toInsert[] = [ - 'fila' => $i, - 'categoria' => $categoria, - 'nombre' => trim(str_replace('*', ' ',$registro['Producto'])), - 'precio' => $registro['Precio'], - 'proveedor_id' => $this->obtenerProveedor($registro['Producto']), - 'bono' => $registro[$this::FILA_HEADER] == "B", - 'requiere_notas'=> $registro[$this::FILA_HEADER] =="PTC", - ]; - } - - foreach (array_chunk($toInsert,DatabaseSeeder::CHUNK_SIZE) as $chunk) - { - DB::table('productos')->insert($chunk); - } - } - - private function obtenerIndiceDeHeader($csv){ - $registros = $csv->getRecords(); - $iheader = 0; - foreach ($registros as $i => $registro){ - if (strtolower($registro[0]) == strtolower($this::FILA_HEADER)) { - $iheader = $i; - break; - } - } - return $iheader; - } - - private function obtenerProveedor($nombre) { - $result = null; - if (Str::contains($nombre,"*")){ - $result = Proveedor::firstOrCreate([ - 'nombre' => 'Proveedor de economía solidaria', - 'economia_solidaria' => 1, - 'nacional' => 1 - ])->id; - } - return $result; + CanastaHelper::cargarCanasta(self::ARCHIVO_DEFAULT); } } From 57b8d6bcceb4206bf10ec7af1fd310a0b956a696 Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Sat, 21 Dec 2024 14:57:03 -0300 Subject: [PATCH 09/23] Agregada logica para cargar canasta --- app/Http/Controllers/ComprasController.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/ComprasController.php b/app/Http/Controllers/ComprasController.php index 48ee549..d30db9d 100644 --- a/app/Http/Controllers/ComprasController.php +++ b/app/Http/Controllers/ComprasController.php @@ -3,11 +3,14 @@ namespace App\Http\Controllers; use App\GrupoDeCompra; +use App\Helpers\CanastaHelper; use App\Producto; use Illuminate\Http\Request; class ComprasController { + const CANASTAS_PATH = 'csv/canastas/'; + public function indexPedidos() { return view('compras_pedidos'); } @@ -41,9 +44,11 @@ class ComprasController 'data' => 'required|file|mimes:csv,txt|max:2048', ]); - $archivo = $request->file('data'); - $path = resource_path('/csv/canastas/'); - $archivo->move($path, $archivo->getClientOriginalName()); + $data = $request->file('data'); + $nombre = $data->getClientOriginalName(); + + $data->move(resource_path(self::CANASTAS_PATH), $nombre); + CanastaHelper::cargarCanasta(self::CANASTAS_PATH . $nombre); return response()->json([ 'message' => 'Canasta cargada exitosamente', From 95a9a404d2a0bc4b8faf2a9f3020a527ba997ce2 Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Sat, 21 Dec 2024 15:08:35 -0300 Subject: [PATCH 10/23] Manejo de archivos movido a helper y limpieza --- app/Helpers/CanastaHelper.php | 8 ++++++++ app/Http/Controllers/ComprasController.php | 5 +---- database/seeds/CanastaSeeder.php | 2 -- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/Helpers/CanastaHelper.php b/app/Helpers/CanastaHelper.php index 1433781..c0b933b 100644 --- a/app/Helpers/CanastaHelper.php +++ b/app/Helpers/CanastaHelper.php @@ -14,6 +14,14 @@ class CanastaHelper const FILA_HEADER = "Tipo"; const ULTIMA_FILA = "TOTAL"; + public static function guardarCanasta($data, $path): string + { + $nombre = $data->getClientOriginalName(); + + $data->move(resource_path($path), $nombre); + return $nombre; + } + public static function cargarCanasta($archivo) { $csv = Reader::createFromPath(resource_path($archivo), 'r'); $csv->setDelimiter("|"); diff --git a/app/Http/Controllers/ComprasController.php b/app/Http/Controllers/ComprasController.php index d30db9d..a2e01f6 100644 --- a/app/Http/Controllers/ComprasController.php +++ b/app/Http/Controllers/ComprasController.php @@ -44,10 +44,7 @@ class ComprasController 'data' => 'required|file|mimes:csv,txt|max:2048', ]); - $data = $request->file('data'); - $nombre = $data->getClientOriginalName(); - - $data->move(resource_path(self::CANASTAS_PATH), $nombre); + $nombre = CanastaHelper::guardarCanasta($request->file('data'), self::CANASTAS_PATH); CanastaHelper::cargarCanasta(self::CANASTAS_PATH . $nombre); return response()->json([ diff --git a/database/seeds/CanastaSeeder.php b/database/seeds/CanastaSeeder.php index 90775b0..167fa8f 100644 --- a/database/seeds/CanastaSeeder.php +++ b/database/seeds/CanastaSeeder.php @@ -2,8 +2,6 @@ use App\Helpers\CanastaHelper; use Illuminate\Database\Seeder; -use League\Csv\Reader; -use App\Proveedor; class CanastaSeeder extends Seeder { From c31b808f05ffd8546c8caeb8c6e6d9a7ad6f8437 Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Sat, 21 Dec 2024 15:16:10 -0300 Subject: [PATCH 11/23] Agregada tabla para log de carga de canastas --- ...4_12_21_181409_crear_carga_de_canastas.php | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 database/migrations/2024_12_21_181409_crear_carga_de_canastas.php diff --git a/database/migrations/2024_12_21_181409_crear_carga_de_canastas.php b/database/migrations/2024_12_21_181409_crear_carga_de_canastas.php new file mode 100644 index 0000000..66e81db --- /dev/null +++ b/database/migrations/2024_12_21_181409_crear_carga_de_canastas.php @@ -0,0 +1,33 @@ +<?php + +use Illuminate\Database\Migrations\Migration; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; + +class CrearCargaDeCanastas extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('carga_de_canastas', function (Blueprint $table) { + $table->id(); + $table->string('nombre'); + $table->string('descripcion'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('carga_de_canastas'); + } +} From cc734866c5ac5b686c3b7aefa685f5d542a75308 Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Sat, 21 Dec 2024 15:48:06 -0300 Subject: [PATCH 12/23] Agregada logica para logs de carga de canastas --- app/CanastaLog.php | 11 +++++++++++ app/Helpers/CanastaHelper.php | 28 ++++++++++++++++++++++++---- 2 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 app/CanastaLog.php diff --git a/app/CanastaLog.php b/app/CanastaLog.php new file mode 100644 index 0000000..d079c84 --- /dev/null +++ b/app/CanastaLog.php @@ -0,0 +1,11 @@ +<?php + +namespace App; + +use Illuminate\Database\Eloquent\Model; + +class CanastaLog extends Model +{ + protected $fillable = ["nombre", "descripcion"]; + protected $table = "carga_de_canastas"; +} diff --git a/app/Helpers/CanastaHelper.php b/app/Helpers/CanastaHelper.php index c0b933b..ad06271 100644 --- a/app/Helpers/CanastaHelper.php +++ b/app/Helpers/CanastaHelper.php @@ -3,6 +3,7 @@ namespace App\Helpers; use App\Proveedor; +use App\CanastaLog; use DatabaseSeeder; use Illuminate\Support\Arr; use Illuminate\Support\Facades\DB; @@ -13,12 +14,16 @@ class CanastaHelper { const FILA_HEADER = "Tipo"; const ULTIMA_FILA = "TOTAL"; + const ARCHIVO_SUBIDO = 'Archivo subido'; + const CANASTA_CARGADA = 'Canasta cargada'; - public static function guardarCanasta($data, $path): string - { + public static function guardarCanasta($data, $path): string { $nombre = $data->getClientOriginalName(); $data->move(resource_path($path), $nombre); + + self::log($path . $nombre, self::ARCHIVO_SUBIDO); + return $nombre; } @@ -73,10 +78,11 @@ class CanastaHelper ]; } - foreach (array_chunk($toInsert,DatabaseSeeder::CHUNK_SIZE) as $chunk) - { + foreach (array_chunk($toInsert,DatabaseSeeder::CHUNK_SIZE) as $chunk) { DB::table('productos')->insert($chunk); } + + self::log($archivo, self::CANASTA_CARGADA); } private static function obtenerIndiceDeHeader($csv){ @@ -102,4 +108,18 @@ class CanastaHelper } return $result; } + + /** + * @param $nombre + * @param $descripcion + * @return void + */ + private static function log($nombre, $descripcion): void + { + $log = new CanastaLog([ + 'nombre' => $nombre, + 'descripcion' => $descripcion, + ]); + $log->save(); + } } From 83016d38b07ebd9930d681fe761bf25c3a4d229f Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Sun, 22 Dec 2024 01:51:53 -0300 Subject: [PATCH 13/23] Agregado instructivo para planilla de canasta --- app/Http/Controllers/ComprasController.php | 5 +++++ resources/js/components/compras/Body.vue | 20 ++++++++++++++++++++ routes/web.php | 1 + 3 files changed, 26 insertions(+) diff --git a/app/Http/Controllers/ComprasController.php b/app/Http/Controllers/ComprasController.php index a2e01f6..92be64e 100644 --- a/app/Http/Controllers/ComprasController.php +++ b/app/Http/Controllers/ComprasController.php @@ -51,4 +51,9 @@ class ComprasController 'message' => 'Canasta cargada exitosamente', ], 200); } + + public function descargarCanastaEjemplo() { + $file = resource_path('csv/productos.csv'); + return response()->download($file); + } } diff --git a/resources/js/components/compras/Body.vue b/resources/js/components/compras/Body.vue index 9828a73..6e85c2b 100644 --- a/resources/js/components/compras/Body.vue +++ b/resources/js/components/compras/Body.vue @@ -11,6 +11,26 @@ <div class="block pb-6" id="canasta-compras-seccion" :class="seccionActiva === 'canasta-compras-seccion' ? 'is-active' : 'is-hidden'"> <div class="block" id="canasta-compras-seccion"> + <article class="message is-warning"> + <div class="message-header"> + <p>Formato de la canasta</p> + </div> + <div class="message-body"> + <div class="content"> + La planilla de la canasta tiene que tener el siguiente formato para que la aplicación la lea correctamente: + <ul> + <li> Los precios deben usar punto y no coma decimal </li> + <li> Después del último producto, en la primera celda, debe estar la palabra "TOTAL", para indicar el final de la lista </li> + <li> El nombre de la columna de precios debe ser "Precio" </li> + <li> Las columnas deben separarse con '|' </li> + <li> No puede haber "enters" en la planilla </li> + <li> Todos los bonos deben tener tipo 'B' para evitar que paguen transporte </li> + <li> El bono de transporte debe tener tipo 'T' </li> + </ul> + <a class="has-text-info" href="/compras/canasta/ejemplo">Planilla de ejemplo.</a> + </div> + </div> + </article> <div class="buttons is-right"> <compras-canasta-input></compras-canasta-input> </div> diff --git a/routes/web.php b/routes/web.php index 8604d18..b6d0392 100644 --- a/routes/web.php +++ b/routes/web.php @@ -84,4 +84,5 @@ Route::middleware(['compras'])->group( function() { Route::get('/compras/pedidos/notas', 'ComprasController@descargarNotas')->name('compras.pedidos.descargar'); Route::get('/compras/pedidos/transporte', 'ComprasController@descargarTransporte')->name('compras.pedidos.descargar'); Route::post('/compras/canasta', 'ComprasController@cargarCanasta')->name('compras.canasta'); + Route::get('/compras/canasta/ejemplo', 'ComprasController@descargarCanastaEjemplo')->name('compras.canasta.ejemplo'); }); From 9f93a170533cfc881ab3ba4b1d06642db7a39565 Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Sun, 22 Dec 2024 01:54:04 -0300 Subject: [PATCH 14/23] Cambio mensaje --- resources/js/components/compras/Body.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/js/components/compras/Body.vue b/resources/js/components/compras/Body.vue index 6e85c2b..0508b51 100644 --- a/resources/js/components/compras/Body.vue +++ b/resources/js/components/compras/Body.vue @@ -23,7 +23,7 @@ <li> Después del último producto, en la primera celda, debe estar la palabra "TOTAL", para indicar el final de la lista </li> <li> El nombre de la columna de precios debe ser "Precio" </li> <li> Las columnas deben separarse con '|' </li> - <li> No puede haber "enters" en la planilla </li> + <li> No puede haber "enters" en ningún campo de la planilla </li> <li> Todos los bonos deben tener tipo 'B' para evitar que paguen transporte </li> <li> El bono de transporte debe tener tipo 'T' </li> </ul> From 76f2af2ef97a710eeee7ac70253db0b683bed551 Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Sun, 22 Dec 2024 09:43:57 -0300 Subject: [PATCH 15/23] Cambio mensaje --- resources/js/components/compras/Body.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/js/components/compras/Body.vue b/resources/js/components/compras/Body.vue index 0508b51..97fc07e 100644 --- a/resources/js/components/compras/Body.vue +++ b/resources/js/components/compras/Body.vue @@ -20,10 +20,10 @@ La planilla de la canasta tiene que tener el siguiente formato para que la aplicación la lea correctamente: <ul> <li> Los precios deben usar punto y no coma decimal </li> - <li> Después del último producto, en la primera celda, debe estar la palabra "TOTAL", para indicar el final de la lista </li> + <li> Después del último producto, en la primera columna, debe estar la palabra "TOTAL" para indicar el final de la lista </li> <li> El nombre de la columna de precios debe ser "Precio" </li> - <li> Las columnas deben separarse con '|' </li> - <li> No puede haber "enters" en ningún campo de la planilla </li> + <li> Las celdas deben separarse con '|' </li> + <li> No puede haber "enters" en ninguna celda </li> <li> Todos los bonos deben tener tipo 'B' para evitar que paguen transporte </li> <li> El bono de transporte debe tener tipo 'T' </li> </ul> From 30eb82220140348a37c8db8947a6c71b2500e1cf Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Sun, 22 Dec 2024 10:28:05 -0300 Subject: [PATCH 16/23] Limpieza de tablas previa a cargar + bono barrial --- app/Helpers/CanastaHelper.php | 26 +++++++++++++++++++ resources/js/components/compras/Body.vue | 7 +++++ .../js/components/compras/CanastaInput.vue | 6 ++--- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/app/Helpers/CanastaHelper.php b/app/Helpers/CanastaHelper.php index ad06271..8473cb2 100644 --- a/app/Helpers/CanastaHelper.php +++ b/app/Helpers/CanastaHelper.php @@ -2,6 +2,7 @@ namespace App\Helpers; +use App\Producto; use App\Proveedor; use App\CanastaLog; use DatabaseSeeder; @@ -28,6 +29,8 @@ class CanastaHelper } public static function cargarCanasta($archivo) { + self::limpiarTablas(); + $csv = Reader::createFromPath(resource_path($archivo), 'r'); $csv->setDelimiter("|"); $iHeader = self::obtenerIndiceDeHeader($csv); @@ -82,6 +85,8 @@ class CanastaHelper DB::table('productos')->insert($chunk); } + self::agregarBonoBarrial(); + self::log($archivo, self::CANASTA_CARGADA); } @@ -122,4 +127,25 @@ class CanastaHelper ]); $log->save(); } + + private static function limpiarTablas() + { + DB::delete('delete from producto_subpedido'); + DB::delete('delete from productos'); + DB::delete('delete from subpedidos'); + } + + private static function agregarBonoBarrial() + { + $categoria = Producto::all()->pluck('categoria')->unique()->flatten()->first(function ($c) { return Str::contains($c, 'BONO'); }); + DB::table('productos')->insert([ + 'fila' => 420, + 'nombre' => "Bono barrial", + 'precio' => 20, + 'categoria' => $categoria, + 'bono' => 1, + 'proveedor_id' => null, + 'requiere_notas'=> false, + ]); + } } diff --git a/resources/js/components/compras/Body.vue b/resources/js/components/compras/Body.vue index 97fc07e..90a1490 100644 --- a/resources/js/components/compras/Body.vue +++ b/resources/js/components/compras/Body.vue @@ -28,6 +28,13 @@ <li> El bono de transporte debe tener tipo 'T' </li> </ul> <a class="has-text-info" href="/compras/canasta/ejemplo">Planilla de ejemplo.</a> + <article class="message is-danger mt-2"> + <div class="message-body"> + <div class="content"> + Cuidado! Cargar una nueva canasta elimina todos los pedidos de la aplicación. + </div> + </div> + </article> </div> </div> </article> diff --git a/resources/js/components/compras/CanastaInput.vue b/resources/js/components/compras/CanastaInput.vue index 0cb55b2..32eca4f 100644 --- a/resources/js/components/compras/CanastaInput.vue +++ b/resources/js/components/compras/CanastaInput.vue @@ -13,10 +13,10 @@ <i class="fas fa-cloud-upload-alt"></i> </span> <span class="file-label">Subir canasta</span> - </span> + </span> <span class="file-name" v-if="archivo"> - {{ archivo.nombre }} - </span> + {{ archivo.nombre }} + </span> </label> </div> </div> From 345be9c6883b6d0aec2de98889013f2dceb462bc Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Sun, 22 Dec 2024 23:41:25 -0300 Subject: [PATCH 17/23] Cambio mensaje --- resources/js/components/compras/Body.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/js/components/compras/Body.vue b/resources/js/components/compras/Body.vue index 90a1490..8bb0d3d 100644 --- a/resources/js/components/compras/Body.vue +++ b/resources/js/components/compras/Body.vue @@ -20,7 +20,6 @@ La planilla de la canasta tiene que tener el siguiente formato para que la aplicación la lea correctamente: <ul> <li> Los precios deben usar punto y no coma decimal </li> - <li> Después del último producto, en la primera columna, debe estar la palabra "TOTAL" para indicar el final de la lista </li> <li> El nombre de la columna de precios debe ser "Precio" </li> <li> Las celdas deben separarse con '|' </li> <li> No puede haber "enters" en ninguna celda </li> From 184b53cfc8d62273ca5a450486ff262ed5fb9bf2 Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Mon, 23 Dec 2024 00:09:39 -0300 Subject: [PATCH 18/23] Cambios minimos --- resources/js/app.js | 2 +- resources/js/components/compras/Body.vue | 4 ++-- resources/js/components/compras/CanastaInput.vue | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/js/app.js b/resources/js/app.js index d61ca56..c2bf1a6 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -32,7 +32,7 @@ Vue.prototype.$rootMiga = { Vue.prototype.$settearProducto = function(cantidad, id) { Event.$emit("sync-subpedido", this.cant, this.producto.id) } -Vue.prototype.$toast = function(mensaje, duration = 1000) { +Vue.prototype.$toast = function(mensaje, duration = 2000) { return window.bulmaToast.toast({ message: mensaje, duration: duration, diff --git a/resources/js/components/compras/Body.vue b/resources/js/components/compras/Body.vue index 8bb0d3d..8bcf794 100644 --- a/resources/js/components/compras/Body.vue +++ b/resources/js/components/compras/Body.vue @@ -1,9 +1,9 @@ <template> <div class="block ml-3 mr-3 is-max-widescreen is-max-desktop"> <comunes-tabs-secciones :tabs="tabs" :tabInicial="tabActiva"></comunes-tabs-secciones> - <div class="block" id="pedidos-compras-seccion" + <div class="block pb-6" id="pedidos-compras-seccion" :class="seccionActiva === 'pedidos-compras-seccion' ? 'is-active' : 'is-hidden'"> - <div class="block pb-6" id="pedidos-compras-tabla-y-dropdown"> + <div class="block" id="pedidos-compras-tabla-y-dropdown"> <compras-dropdown-descargar> </compras-dropdown-descargar> </div> diff --git a/resources/js/components/compras/CanastaInput.vue b/resources/js/components/compras/CanastaInput.vue index 32eca4f..99da19e 100644 --- a/resources/js/components/compras/CanastaInput.vue +++ b/resources/js/components/compras/CanastaInput.vue @@ -15,7 +15,7 @@ <span class="file-label">Subir canasta</span> </span> <span class="file-name" v-if="archivo"> - {{ archivo.nombre }} + {{ 'Cargando ' + archivo.nombre }} </span> </label> </div> From 1f2ab91bd3c37a0f22b6f10cdae69daee96f9969 Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Mon, 23 Dec 2024 15:57:18 -0300 Subject: [PATCH 19/23] Cambios nombre columna --- .../migrations/2024_12_21_181409_crear_carga_de_canastas.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/migrations/2024_12_21_181409_crear_carga_de_canastas.php b/database/migrations/2024_12_21_181409_crear_carga_de_canastas.php index 66e81db..e746113 100644 --- a/database/migrations/2024_12_21_181409_crear_carga_de_canastas.php +++ b/database/migrations/2024_12_21_181409_crear_carga_de_canastas.php @@ -15,7 +15,7 @@ class CrearCargaDeCanastas extends Migration { Schema::create('carga_de_canastas', function (Blueprint $table) { $table->id(); - $table->string('nombre'); + $table->string('path'); $table->string('descripcion'); $table->timestamps(); }); From d0ffcda22625d59d94d8d686aba9fd6118a897ca Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Mon, 23 Dec 2024 15:58:14 -0300 Subject: [PATCH 20/23] Cambios nombre columna --- app/Helpers/CanastaHelper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Helpers/CanastaHelper.php b/app/Helpers/CanastaHelper.php index 8473cb2..3e0d4e5 100644 --- a/app/Helpers/CanastaHelper.php +++ b/app/Helpers/CanastaHelper.php @@ -122,7 +122,7 @@ class CanastaHelper private static function log($nombre, $descripcion): void { $log = new CanastaLog([ - 'nombre' => $nombre, + 'path' => $nombre, 'descripcion' => $descripcion, ]); $log->save(); From 5feb2ff22f535f4ce1cf71beac8b662713a0f020 Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Mon, 23 Dec 2024 15:58:33 -0300 Subject: [PATCH 21/23] Cambios nombre columna --- app/Helpers/CanastaHelper.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Helpers/CanastaHelper.php b/app/Helpers/CanastaHelper.php index 3e0d4e5..ce37cf7 100644 --- a/app/Helpers/CanastaHelper.php +++ b/app/Helpers/CanastaHelper.php @@ -115,14 +115,14 @@ class CanastaHelper } /** - * @param $nombre + * @param $path * @param $descripcion * @return void */ - private static function log($nombre, $descripcion): void + private static function log($path, $descripcion): void { $log = new CanastaLog([ - 'path' => $nombre, + 'path' => $path, 'descripcion' => $descripcion, ]); $log->save(); From 7b36aa0b0c84e8d5d4af9b6b2f25d59a112b00df Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Mon, 23 Dec 2024 18:54:49 -0300 Subject: [PATCH 22/23] Arreglado error en FilaCaracteristica.vue --- resources/js/components/admin/FilaCaracteristica.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/resources/js/components/admin/FilaCaracteristica.vue b/resources/js/components/admin/FilaCaracteristica.vue index 9d5654b..ea01839 100644 --- a/resources/js/components/admin/FilaCaracteristica.vue +++ b/resources/js/components/admin/FilaCaracteristica.vue @@ -6,7 +6,9 @@ export default { caracteristica: Object }, data() { - gdc: undefined + return { + gdc: undefined + } }, watch: { '$root.gdc' : { From 94c2baff076d9092edde2abda871d2e459de8c70 Mon Sep 17 00:00:00 2001 From: ale <ale.tasistro@gmail.com> Date: Tue, 24 Dec 2024 15:02:46 -0300 Subject: [PATCH 23/23] Arreglado nombre de campo --- app/CanastaLog.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/CanastaLog.php b/app/CanastaLog.php index d079c84..a6de251 100644 --- a/app/CanastaLog.php +++ b/app/CanastaLog.php @@ -6,6 +6,6 @@ use Illuminate\Database\Eloquent\Model; class CanastaLog extends Model { - protected $fillable = ["nombre", "descripcion"]; + protected $fillable = ["path", "descripcion"]; protected $table = "carga_de_canastas"; }