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

<?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.']);
}
}