Agregados metodos, ruta, y csv para parametros de la aplicacion
This commit is contained in:
parent
f520578525
commit
d87091846d
5 changed files with 113 additions and 15 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
3
resources/csv/parametros.csv
Normal file
3
resources/csv/parametros.csv
Normal file
|
@ -0,0 +1,3 @@
|
|||
id|nombre|valor
|
||||
bono-transporte|'Bono de transporte'|15
|
||||
monto-olla|'Monto por olla'|1200
|
|
|
@ -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');
|
||||
});
|
||||
|
|
|
@ -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');
|
||||
|
|
Loading…
Add table
Reference in a new issue