Agregados metodos, ruta, y csv para parametros de la aplicacion

This commit is contained in:
Alejandro Tasistro 2025-06-23 19:11:49 -03:00
parent f520578525
commit d87091846d
5 changed files with 113 additions and 15 deletions

View file

@ -2,6 +2,7 @@
namespace App\Helpers;
use App\Http\Controllers\ComisionesController;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Log;
use Iterator;
@ -13,15 +14,13 @@ use League\Csv\Writer;
class CsvHelper
{
/**
* @throws Exception
*/
public static function getRecords($filePath, $message): Iterator {
$csv = Reader::createFromPath($filePath);
try {
$csv->setDelimiter("|");
$csv->setEnclosure("'");
$csv->setHeaderOffset(0);
$csv = self::getReader($filePath);
return $csv->getRecords();
} catch (InvalidArgument|Exception $e) {
Log::error($e->getMessage());
@ -29,20 +28,74 @@ class CsvHelper
}
}
public static function generarCsv($filePath, $contenido, $headers = null): void
/**
* @throws Exception
*/
public static function cambiarParametro(string $id, string $valor): void
{
if (!File::exists(storage_path('csv/exports'))) {
File::makeDirectory(storage_path('csv/exports'), 0755, true);
}
try {
$writer = Writer::createFromPath(storage_path($filePath), 'w');
if ($headers) {
$writer->insertOne($headers);
$updated = false;
$filePath = resource_path(ComisionesController::PARAMETROS_PATH);
$csv = self::getReader($filePath);
$headers = $csv->getHeader();
$records = array_map(fn($r) => (array) $r, iterator_to_array($csv->getRecords()));
foreach ($records as &$record) {
if ($record['id'] === $id) {
$record['valor'] = $valor;
$updated = true;
break;
}
}
$writer->insertAll($contenido);
} catch (CannotInsertRecord $e) {
Log::error($e->getMessage(), $e->getTrace());
unset($record);
if (!$updated)
throw new Exception("Parametro '{$id}' no encontrado.");
self::generarCsv($filePath, $records, $headers, "|", "'", false);
} catch (CannotInsertRecord | InvalidArgument $e) {
Log::error("Error al actualizar csv: " . $e->getMessage());
throw new Exception("Error al actualizar csv", $e);
}
}
/**
* @throws InvalidArgument
* @throws CannotInsertRecord
*/
public static function generarCsv($filePath, $contenido, $headers = null, $delimiter = null, $enclosure = null, $export = true): void
{
$path = $filePath;
if ($export) {
if (!File::exists(storage_path('csv/exports')))
File::makeDirectory(storage_path('csv/exports'), 0755, true);
$path = storage_path($filePath);
}
$writer = Writer::createFromPath($path, 'w');
if ($delimiter)
$writer->setDelimiter($delimiter);
if ($enclosure)
$writer->setEnclosure($enclosure);
if ($headers)
$writer->insertOne($headers);
$writer->insertAll($contenido);
}
/**
* @param string $filePath
* @return Reader
* @throws InvalidArgument
* @throws Exception
*/
private static function getReader(string $filePath): Reader
{
$csv = Reader::createFromPath($filePath);
$csv->setDelimiter("|");
$csv->setEnclosure("'");
$csv->setHeaderOffset(0);
return $csv;
}
}

View file

@ -15,6 +15,7 @@ use Symfony\Component\HttpFoundation\BinaryFileResponse;
class ComisionesController
{
const PARAMETROS_PATH = 'csv/parametros.csv';
const CANASTAS_PATH = 'csv/canastas/';
const BARRIO = "Barrio";
const SALDO = "Saldo";
@ -110,4 +111,42 @@ class ComisionesController
return response()->json(GrupoDeCompraResource::collection(GrupoDeCompra::all()));
}
public function obtenerParametros()
{
try {
$records = self::parametrosRecords();
$result = [];
foreach ($records as $record)
$result[] = $record;
return response()->json($result);
} catch (Exception $e) {
return response()->json(['message' => $e->getMessage()], 500);
}
}
public function modificarParametros(string $parametro_id, Request $request) {
try {
if (collect(self::parametrosRecords())
->contains('id', $parametro_id)) {
$valid = $request->validate([
'valor' => ['required', 'numeric', 'gte:0'],
]);
CsvHelper::cambiarParametro($parametro_id, $valid['valor']);
return response()->noContent();
}
return response()->json(['message' => 'Parametro no encontrado.'], 404);
} catch (Exception $e) {
return response()->json(['message' => $e->getMessage()], 500);
}
}
/**
* @throws Exception
*/
private static function parametrosRecords(): array
{
$records = CsvHelper::getRecords(resource_path(self::PARAMETROS_PATH), "No se pudo leer el archivo.");
return iterator_to_array($records);
}
}

View file

@ -0,0 +1,3 @@
id|nombre|valor
bono-transporte|'Bono de transporte'|15
monto-olla|'Monto por olla'|1200
1 id nombre valor
2 bono-transporte 'Bono de transporte' 15
3 monto-olla 'Monto por olla' 1200

View file

@ -52,4 +52,6 @@ Route::middleware('api')->group(function() {
Route::prefix('ollas')->group(function() {
Route::get('/{gdc}','Api\OllasController@pedido');
});
Route::get('/parametros', 'ComisionesController@obtenerParametros');
});

View file

@ -56,6 +56,7 @@ Route::middleware(['auth', 'role:comision'])->group( function() {
Route::get('/comisiones/canasta/ejemplo', 'ComisionesController@descargarCanastaEjemplo')->name('comisiones.canasta.ejemplo');
Route::post('/comisiones/canasta', 'ComisionesController@cargarCanasta')->name('comisiones.canasta');
Route::post('/comisiones/saldos', 'ComisionesController@cargarSaldos')->name('comisiones.saldos');
Route::put('/comisiones/parametros/{parametro_id}', 'ComisionesController@modificarParametros');
});
Route::get('/ollas/login', 'OllasController@show')->name('ollas.login');