You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.5 KiB
PHTML
72 lines
2.5 KiB
PHTML
|
2 months ago
|
<?php
|
||
|
|
|
||
|
|
namespace App\Http\Controllers\Administracion;
|
||
|
|
|
||
|
|
use App\Http\Controllers\Controller;
|
||
|
|
use App\Models\ProcesoAdmisionResultadoArchivo;
|
||
|
|
use Illuminate\Http\Request;
|
||
|
|
use Illuminate\Support\Facades\Storage;
|
||
|
|
|
||
|
|
class ProcesoAdmisionResultadoArchivoController extends Controller
|
||
|
|
{
|
||
|
|
public function index(int $procesoId)
|
||
|
|
{
|
||
|
|
$archivos = ProcesoAdmisionResultadoArchivo::where('proceso_admision_id', $procesoId)
|
||
|
|
->orderBy('orden')
|
||
|
|
->get();
|
||
|
|
|
||
|
|
return response()->json($archivos);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function store(Request $request, int $procesoId)
|
||
|
|
{
|
||
|
|
$request->validate([
|
||
|
|
'orden' => 'required|integer|min:1|max:6',
|
||
|
|
'nombre' => 'required|string|max:255',
|
||
|
|
'archivo' => 'required|file|mimes:txt|max:10240',
|
||
|
|
]);
|
||
|
|
|
||
|
|
// Máximo 6 archivos por proceso
|
||
|
|
$count = ProcesoAdmisionResultadoArchivo::where('proceso_admision_id', $procesoId)->count();
|
||
|
|
if ($count >= 6) {
|
||
|
|
return response()->json(['message' => 'Máximo 6 archivos por proceso.'], 422);
|
||
|
|
}
|
||
|
|
|
||
|
|
// No puede haber dos archivos con el mismo orden en el mismo proceso
|
||
|
|
$existe = ProcesoAdmisionResultadoArchivo::where('proceso_admision_id', $procesoId)
|
||
|
|
->where('orden', $request->orden)
|
||
|
|
->exists();
|
||
|
|
if ($existe) {
|
||
|
|
return response()->json(['message' => 'Ya existe un archivo para ese slot.'], 422);
|
||
|
|
}
|
||
|
|
|
||
|
|
$contenido = file_get_contents($request->file('archivo')->getRealPath());
|
||
|
|
$encoding = mb_detect_encoding($contenido, ['UTF-8', 'Windows-1252', 'ISO-8859-1'], true);
|
||
|
|
$contenidoUtf8 = ($encoding === 'UTF-8')
|
||
|
|
? $contenido
|
||
|
|
: mb_convert_encoding($contenido, 'UTF-8', $encoding ?: 'Windows-1252');
|
||
|
|
$filename = uniqid() . '.txt';
|
||
|
|
$path = "proceso-resultados/{$procesoId}/{$filename}";
|
||
|
|
\Storage::disk('public')->put($path, $contenidoUtf8);
|
||
|
|
|
||
|
|
$archivo = ProcesoAdmisionResultadoArchivo::create([
|
||
|
|
'proceso_admision_id' => $procesoId,
|
||
|
|
'nombre' => $request->nombre,
|
||
|
|
'file_path' => $path,
|
||
|
|
'orden' => $request->orden,
|
||
|
|
]);
|
||
|
|
|
||
|
|
return response()->json($archivo, 201);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function destroy(int $id)
|
||
|
|
{
|
||
|
|
$archivo = ProcesoAdmisionResultadoArchivo::findOrFail($id);
|
||
|
|
|
||
|
|
Storage::disk('public')->delete($archivo->file_path);
|
||
|
|
$archivo->delete();
|
||
|
|
|
||
|
|
return response()->json(['message' => 'Eliminado correctamente.']);
|
||
|
|
}
|
||
|
|
}
|