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;
|
namespace App\Helpers;
|
||||||
|
|
||||||
|
use App\Http\Controllers\ComisionesController;
|
||||||
use Illuminate\Support\Facades\File;
|
use Illuminate\Support\Facades\File;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Iterator;
|
use Iterator;
|
||||||
|
@ -13,15 +14,13 @@ use League\Csv\Writer;
|
||||||
|
|
||||||
class CsvHelper
|
class CsvHelper
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public static function getRecords($filePath, $message): Iterator {
|
public static function getRecords($filePath, $message): Iterator {
|
||||||
$csv = Reader::createFromPath($filePath);
|
|
||||||
try {
|
try {
|
||||||
$csv->setDelimiter("|");
|
$csv = self::getReader($filePath);
|
||||||
$csv->setEnclosure("'");
|
|
||||||
$csv->setHeaderOffset(0);
|
|
||||||
return $csv->getRecords();
|
return $csv->getRecords();
|
||||||
} catch (InvalidArgument|Exception $e) {
|
} catch (InvalidArgument|Exception $e) {
|
||||||
Log::error($e->getMessage());
|
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'))) {
|
try {
|
||||||
File::makeDirectory(storage_path('csv/exports'), 0755, true);
|
$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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
/**
|
||||||
$writer = Writer::createFromPath(storage_path($filePath), 'w');
|
* @throws InvalidArgument
|
||||||
if ($headers) {
|
* @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->insertOne($headers);
|
||||||
}
|
|
||||||
$writer->insertAll($contenido);
|
$writer->insertAll($contenido);
|
||||||
} catch (CannotInsertRecord $e) {
|
|
||||||
Log::error($e->getMessage(), $e->getTrace());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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
|
class ComisionesController
|
||||||
{
|
{
|
||||||
|
const PARAMETROS_PATH = 'csv/parametros.csv';
|
||||||
const CANASTAS_PATH = 'csv/canastas/';
|
const CANASTAS_PATH = 'csv/canastas/';
|
||||||
const BARRIO = "Barrio";
|
const BARRIO = "Barrio";
|
||||||
const SALDO = "Saldo";
|
const SALDO = "Saldo";
|
||||||
|
@ -110,4 +111,42 @@ class ComisionesController
|
||||||
|
|
||||||
return response()->json(GrupoDeCompraResource::collection(GrupoDeCompra::all()));
|
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::prefix('ollas')->group(function() {
|
||||||
Route::get('/{gdc}','Api\OllasController@pedido');
|
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::get('/comisiones/canasta/ejemplo', 'ComisionesController@descargarCanastaEjemplo')->name('comisiones.canasta.ejemplo');
|
||||||
Route::post('/comisiones/canasta', 'ComisionesController@cargarCanasta')->name('comisiones.canasta');
|
Route::post('/comisiones/canasta', 'ComisionesController@cargarCanasta')->name('comisiones.canasta');
|
||||||
Route::post('/comisiones/saldos', 'ComisionesController@cargarSaldos')->name('comisiones.saldos');
|
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');
|
Route::get('/ollas/login', 'OllasController@show')->name('ollas.login');
|
||||||
|
|
Loading…
Add table
Reference in a new issue