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/GrupoDeCompra.php b/app/GrupoDeCompra.php
index a5f8cc4..a16f87b 100644
--- a/app/GrupoDeCompra.php
+++ b/app/GrupoDeCompra.php
@@ -117,7 +117,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
@@ -150,7 +151,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
@@ -184,7 +186,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
@@ -241,7 +244,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/Helpers/CanastaHelper.php b/app/Helpers/CanastaHelper.php
index 5ec9485..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
@@ -19,10 +20,25 @@ class CanastaHelper
const CANASTA_CARGADA = 'Canasta cargada';
const PRODUCTO_TALLE_COLOR = "PTC";
+ public static function canastaActual() {
+ $result = [];
+ $log = CanastaLog::where('descripcion', self::CANASTA_CARGADA)
+ ->orderBy('created_at', 'desc')
+ ->first();
+ $nombre = str_replace("csv/canastas/", "", $log->path);
+ $result["nombre"] = str_replace(".csv", "", $nombre);
+ $result["fecha"] = $log->created_at;
+ return $result;
+ }
+
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..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 = resource_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 = resource_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/Api/CanastaController.php b/app/Http/Controllers/Api/CanastaController.php
new file mode 100644
index 0000000..510a364
--- /dev/null
+++ b/app/Http/Controllers/Api/CanastaController.php
@@ -0,0 +1,13 @@
+json(CanastaHelper::canastaActual());
+ }
+}
diff --git a/app/Http/Controllers/ComisionesController.php b/app/Http/Controllers/ComisionesController.php
new file mode 100644
index 0000000..9ffd3f1
--- /dev/null
+++ b/app/Http/Controllers/ComisionesController.php
@@ -0,0 +1,70 @@
+ filemtime($a);
+ });
+
+ return response()->download($files[0]);
+ }
+
+ public function descargarNotas(): BinaryFileResponse
+ {
+ Producto::planillaNotas();
+ $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() {
+ GrupoDeCompra::exportarPedidosBarrialesAPdf();
+ }
+
+ public function cargarCanasta(Request $request): JsonResponse
+ {
+ $request->validate([
+ 'data' => 'required|file|mimes:csv,txt|max:2048',
+ ]);
+
+ $nombre = CanastaHelper::guardarCanasta($request->file('data'), self::CANASTAS_PATH);
+ CanastaHelper::cargarCanasta(self::CANASTAS_PATH . $nombre);
+
+ return response()->json([
+ 'message' => 'Canasta cargada exitosamente',
+ ]);
+ }
+
+ public function descargarCanastaEjemplo(): BinaryFileResponse
+ {
+ $file = storage_path('csv/productos.csv');
+ return response()->download($file);
+ }
+}
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/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,
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/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);
}
}
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/components/login/LoginInput.vue b/resources/js/components/login/LoginInput.vue
index 04584a8..8305deb 100644
--- a/resources/js/components/login/LoginInput.vue
+++ b/resources/js/components/login/LoginInput.vue
@@ -14,7 +14,7 @@ export default {
-
+
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"]),
diff --git a/resources/js/store/modules/login.js b/resources/js/store/modules/login.js
index d41dad9..e5b9fcd 100644
--- a/resources/js/store/modules/login.js
+++ b/resources/js/store/modules/login.js
@@ -58,7 +58,7 @@ const getters = {
ayuda: "Si no la sabés, consultá a la comisión informática",
label: "Seleccioná tu región"
};
- case 'compras':
+ case 'comisiones':
return {
titulo: "Comisiones MPS",
subtitlo: "página de comisiones",
@@ -87,7 +87,7 @@ const getters = {
texto: "has-text-white",
botones: "is-warning",
};
- case 'compras':
+ case 'comisiones':
return {
fondo: "has-background-warning",
texto: "",
@@ -109,9 +109,9 @@ const getters = {
case 'admin':
return [
{ nombre: "Pedidos", href: "/" },
- { nombre: "Compras", href: "/compras" }
+ { nombre: "Comisiones", href: "/comisiones" }
];
- case 'compras':
+ case 'comisiones':
return [
{ nombre: "Pedidos", href: "/" },
{ nombre: "Administración", href: "/admin" }
@@ -119,7 +119,7 @@ const getters = {
case 'pedido':
return [
{ nombre: "Administración", href: "/admin" },
- { nombre: "Compras", href: "/compras" }
+ { nombre: "Comisiones", href: "/comisiones" }
];
default:
throw new Error("Url inválida");
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);
diff --git a/routes/api.php b/routes/api.php
index e2acfdd..c9d08d1 100644
--- a/routes/api.php
+++ b/routes/api.php
@@ -17,6 +17,8 @@ Route::middleware('api')->group(function() {
Route::get('/regiones', 'Api\GrupoDeCompraController@regiones');
Route::get('/regiones/{region}', 'Api\GrupoDeCompraController@region');
+ Route::get('/canasta-actual', 'Api\CanastaController@canastaActual');
+
Route::prefix('grupos-de-compra')->group(function() {
Route::get('/', 'Api\GrupoDeCompraController@index');
Route::get('/{grupoDeCompra}', 'Api\GrupoDeCompraController@show');
diff --git a/routes/web.php b/routes/web.php
index b963c10..a0cade9 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -45,14 +45,14 @@ Route::middleware(['auth', 'role:admin_barrio'])->group(function () {
Route::get('/admin/exportar-pedido-con-nucleos-a-csv/{gdc}', 'AdminController@exportarPedidoConNucleosACSV');
});
-Route::get('/compras/login', 'ComprasController@show')->name('compras.login');
+Route::get('/comisiones/login', 'ComisionesController@show')->name('comisiones.login');
Route::middleware(['auth', 'role:comision'])->group( function() {
- Route::get('/compras', 'RouteController@main')->name('compras');
- 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/pdf', 'ComprasController@pdf')->name('compras.pedidos.pdf');
- Route::get('/compras/canasta/ejemplo', 'ComprasController@descargarCanastaEjemplo')->name('compras.canasta.ejemplo');
- Route::post('/compras/canasta', 'ComprasController@cargarCanasta')->name('compras.canasta');
- Route::post('/compras/saldos', 'ComprasController@cargarSaldos')->name('compras.canasta');
+ 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.descargar');
+ Route::get('/comisiones/pedidos/pdf', 'ComisionesController@pdf')->name('comisiones.pedidos.pdf');
+ Route::get('/comisiones/canasta/ejemplo', 'ComisionesController@descargarCanastaEjemplo')->name('comisiones.canasta.ejemplo');
+ Route::post('/comisiones/canasta', 'ComisionesController@cargarCanasta')->name('comisiones.canasta');
+ Route::post('/comisiones/saldos', 'ComprasController@cargarSaldos')->name('compras.canasta');
});
diff --git a/run_watch.sh b/run_watch.sh
new file mode 100755
index 0000000..f0fbd92
--- /dev/null
+++ b/run_watch.sh
@@ -0,0 +1 @@
+sudo docker compose exec app npm run watch