|
|
@@ -5,6 +5,8 @@ use Illuminate\Support\Facades\DB;
|
|
|
use Illuminate\Http\Request;
|
|
|
use App\Http\Controllers\Controller;
|
|
|
use App\Models\PersonaAutorizada;
|
|
|
+use Illuminate\Support\Facades\Storage;
|
|
|
+
|
|
|
|
|
|
class RegistroAcademico extends Controller
|
|
|
{
|
|
|
@@ -356,50 +358,34 @@ public function ActualizarRegistroAca(Request $request, $id){
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
public function registroAdministrativo(Request $request) {
|
|
|
$message = '';
|
|
|
$status = 0;
|
|
|
- $nombreArchivo = '';
|
|
|
+ $rutaS3 = '';
|
|
|
|
|
|
try {
|
|
|
- // Validar campos requeridos mínimos
|
|
|
$request->validate([
|
|
|
'idAlumno' => 'required',
|
|
|
'usuarioRegistro' => 'required',
|
|
|
]);
|
|
|
|
|
|
- // Procesar archivo si se recibió como base64
|
|
|
- if ($request->has('constanciaFiscalBase64') && $request->has('nombreArchivo')) {
|
|
|
- $base64 = $request->constanciaFiscalBase64;
|
|
|
- $nombreArchivo = time() . '_' . $request->idAlumno . '_' . preg_replace('/[^a-zA-Z0-9._-]/', '', $request->nombreArchivo);
|
|
|
-
|
|
|
- // Limpiar encabezado si viene con "data:..."
|
|
|
- if (preg_match('/^data:application\/pdf;base64,/', $base64)) {
|
|
|
- $base64 = substr($base64, strpos($base64, ',') + 1);
|
|
|
- }
|
|
|
-
|
|
|
- $contenido = base64_decode($base64);
|
|
|
-
|
|
|
- if ($contenido === false) {
|
|
|
- throw new \Exception('No se pudo decodificar el archivo PDF');
|
|
|
- }
|
|
|
+ // Si se subió el archivo como form-data
|
|
|
+ if ($request->hasFile('constanciaFiscal')) {
|
|
|
+ $archivo = $request->file('constanciaFiscal');
|
|
|
|
|
|
- $rutaDestino = public_path('uploads/constancias_fiscales');
|
|
|
- if (!file_exists($rutaDestino)) {
|
|
|
- if (!mkdir($rutaDestino, 0755, true)) {
|
|
|
- throw new \Exception('No se pudo crear el directorio para guardar el archivo');
|
|
|
- }
|
|
|
+ if (!$archivo->isValid()) {
|
|
|
+ throw new \Exception('Archivo inválido');
|
|
|
}
|
|
|
|
|
|
- file_put_contents($rutaDestino . '/' . $nombreArchivo, $contenido);
|
|
|
+ $nombreArchivo = time() . '_' . $request->idAlumno . '_' . preg_replace('/[^a-zA-Z0-9._-]/', '', $archivo->getClientOriginalName());
|
|
|
|
|
|
- // Verificar que el archivo se haya guardado
|
|
|
- if (!file_exists($rutaDestino . '/' . $nombreArchivo)) {
|
|
|
- throw new \Exception('El archivo no se guardó correctamente desde base64');
|
|
|
- }
|
|
|
+ // Subir directamente a S3
|
|
|
+ $rutaS3 = 'constancias_fiscales/' . $nombreArchivo;
|
|
|
+ Storage::disk('s3')->put($rutaS3, file_get_contents($archivo), 'public');
|
|
|
}
|
|
|
|
|
|
- // Preparar datos para la inserción
|
|
|
+ // Guardar datos en BD
|
|
|
$registro = [
|
|
|
'idEscuela' => $request->idEscuela ?? 'COLEGIOABC',
|
|
|
'idAlumno' => $request->idAlumno,
|
|
|
@@ -415,14 +401,13 @@ public function registroAdministrativo(Request $request) {
|
|
|
'RegA_DireccionFactura' => $request->domicilioFactura ?? 'NA',
|
|
|
'RegA_CorreoFactura' => $request->correoFactura ?? 'NA',
|
|
|
'RegA_CuentaPago' => $request->cuentaPago ?? 'NA',
|
|
|
- 'RegA_ConstanciaFiscal' => $nombreArchivo,
|
|
|
+ 'RegA_ConstanciaFiscal' => $rutaS3, // Ruta en S3
|
|
|
'RegA_Modalidad' => 'Presencial',
|
|
|
'usuarioRegistro' => $request->usuarioRegistro,
|
|
|
'created_at' => now(),
|
|
|
'updated_at' => now(),
|
|
|
];
|
|
|
|
|
|
- // Insertar en la base de datos
|
|
|
$insertado = DB::table('registroadministrativo')->insert($registro);
|
|
|
|
|
|
if (!$insertado) {
|
|
|
@@ -433,9 +418,9 @@ public function registroAdministrativo(Request $request) {
|
|
|
$status = 200;
|
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
- // Eliminar el archivo si algo falló
|
|
|
- if ($nombreArchivo && file_exists(public_path('uploads/constancias_fiscales/' . $nombreArchivo))) {
|
|
|
- @unlink(public_path('uploads/constancias_fiscales/' . $nombreArchivo));
|
|
|
+ // Eliminar archivo si hubo error
|
|
|
+ if ($rutaS3 && Storage::disk('s3')->exists($rutaS3)) {
|
|
|
+ Storage::disk('s3')->delete($rutaS3);
|
|
|
}
|
|
|
|
|
|
$message = 'Error: ' . $e->getMessage();
|
|
|
@@ -444,11 +429,11 @@ public function registroAdministrativo(Request $request) {
|
|
|
|
|
|
return response()->json([
|
|
|
'mensaje' => $message,
|
|
|
- 'archivo' => $nombreArchivo
|
|
|
+ 'archivo' => $rutaS3
|
|
|
], $status);
|
|
|
}
|
|
|
|
|
|
- public function editarRegistroAdmin(Request $request, $id)
|
|
|
+ public function editarRegistroAdmin(Request $request, $id)
|
|
|
{
|
|
|
$message = '';
|
|
|
$status = 0;
|
|
|
@@ -489,7 +474,6 @@ public function registroAdministrativo(Request $request) {
|
|
|
'usuarioRegistro' => 'usuarioRegistro',
|
|
|
];
|
|
|
|
|
|
- // Procesar cada campo
|
|
|
foreach ($camposMapeo as $campoRequest => $campoBD) {
|
|
|
if ($request->has($campoRequest)) {
|
|
|
$valor = $request->input($campoRequest);
|
|
|
@@ -500,45 +484,42 @@ public function registroAdministrativo(Request $request) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // Procesar archivo en Base64 si existe
|
|
|
+ // Procesar archivo en base64 si existe
|
|
|
if ($request->has('constanciaFiscalBase64') && $request->has('nombreArchivo')) {
|
|
|
$base64 = $request->input('constanciaFiscalBase64');
|
|
|
$nombreOriginal = $request->input('nombreArchivo');
|
|
|
$extension = pathinfo($nombreOriginal, PATHINFO_EXTENSION);
|
|
|
|
|
|
- // Validar que sea un PDF
|
|
|
+ // Validar extensión PDF
|
|
|
if (strtolower($extension) !== 'pdf') {
|
|
|
return response()->json(['mensaje' => 'El archivo debe ser PDF'], 400);
|
|
|
}
|
|
|
|
|
|
- // Generar nombre único para el archivo
|
|
|
+ // Generar nombre único
|
|
|
$nombreArchivo = time() . '_' . $idAlumno . '_' . $nombreOriginal;
|
|
|
|
|
|
- // Extraer el contenido Base64 (eliminar el prefijo data:application/pdf;base64,)
|
|
|
+ // Limpiar y decodificar el contenido base64
|
|
|
$base64Str = substr($base64, strpos($base64, ',') + 1);
|
|
|
$contenidoArchivo = base64_decode($base64Str);
|
|
|
|
|
|
- // Validar tamaño del archivo (5MB máximo)
|
|
|
+ // Validar tamaño (máximo 5 MB)
|
|
|
if (strlen($contenidoArchivo) > (5 * 1024 * 1024)) {
|
|
|
return response()->json(['mensaje' => 'El archivo es demasiado grande (máximo 5MB)'], 400);
|
|
|
}
|
|
|
|
|
|
- $rutaDestino = public_path('uploads/constancias_fiscales');
|
|
|
- if (!file_exists($rutaDestino)) {
|
|
|
- mkdir($rutaDestino, 0755, true);
|
|
|
- }
|
|
|
+ // Ruta nueva en S3
|
|
|
+ $rutaS3 = 'constancias_fiscales/' . $nombreArchivo;
|
|
|
|
|
|
- // Eliminar archivo anterior si existe
|
|
|
- if ($registroExistente->RegA_ConstanciaFiscal) {
|
|
|
- $rutaArchivoAnterior = public_path('uploads/constancias_fiscales/' . $registroExistente->RegA_ConstanciaFiscal);
|
|
|
- if (file_exists($rutaArchivoAnterior)) {
|
|
|
- unlink($rutaArchivoAnterior);
|
|
|
- }
|
|
|
+ // Eliminar archivo anterior en S3 si existe
|
|
|
+ if ($registroExistente->RegA_ConstanciaFiscal && Storage::disk('s3')->exists($registroExistente->RegA_ConstanciaFiscal)) {
|
|
|
+ Storage::disk('s3')->delete($registroExistente->RegA_ConstanciaFiscal);
|
|
|
}
|
|
|
|
|
|
- // Guardar el nuevo archivo
|
|
|
- file_put_contents($rutaDestino . '/' . $nombreArchivo, $contenidoArchivo);
|
|
|
- $datosActualizar['RegA_ConstanciaFiscal'] = $nombreArchivo;
|
|
|
+ // Subir a S3
|
|
|
+ Storage::disk('s3')->put($rutaS3, $contenidoArchivo, 'public');
|
|
|
+
|
|
|
+ // Guardar nueva ruta
|
|
|
+ $datosActualizar['RegA_ConstanciaFiscal'] = $rutaS3;
|
|
|
}
|
|
|
|
|
|
// Campos adicionales
|
|
|
@@ -579,11 +560,9 @@ public function registroAdministrativo(Request $request) {
|
|
|
error_log('ERROR en editarRegistroAdmin: ' . $e->getMessage());
|
|
|
error_log('Stack trace: ' . $e->getTraceAsString());
|
|
|
|
|
|
- if (isset($nombreArchivo) && $nombreArchivo && isset($registroExistente) && $nombreArchivo !== $registroExistente->RegA_ConstanciaFiscal) {
|
|
|
- $rutaArchivo = public_path('uploads/constancias_fiscales/' . $nombreArchivo);
|
|
|
- if (file_exists($rutaArchivo)) {
|
|
|
- unlink($rutaArchivo);
|
|
|
- }
|
|
|
+ // Eliminar archivo nuevo si ocurrió error
|
|
|
+ if (isset($rutaS3) && Storage::disk('s3')->exists($rutaS3)) {
|
|
|
+ Storage::disk('s3')->delete($rutaS3);
|
|
|
}
|
|
|
|
|
|
$message = 'Error interno del servidor: ' . $e->getMessage();
|
|
|
@@ -592,6 +571,8 @@ public function registroAdministrativo(Request $request) {
|
|
|
|
|
|
return response()->json(['mensaje' => $message], $status);
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
public function getOneRegistroAdmi($id){
|
|
|
$id = base64_decode($id);
|
|
|
$registro = DB::table('registroadministrativo')
|