|
|
@@ -6,6 +6,7 @@ use Illuminate\Http\Request;
|
|
|
use App\Http\Controllers\Controller;
|
|
|
use App\Models\PersonaAutorizada;
|
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
+use Illuminate\Support\Str;
|
|
|
|
|
|
|
|
|
class RegistroAcademico extends Controller
|
|
|
@@ -358,11 +359,11 @@ public function ActualizarRegistroAca(Request $request, $id){
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
public function registroAdministrativo(Request $request) {
|
|
|
$message = '';
|
|
|
$status = 0;
|
|
|
$rutaS3 = '';
|
|
|
+ $uuidArchivo = Str::uuid()->toString(); // Identificador único
|
|
|
|
|
|
try {
|
|
|
$request->validate([
|
|
|
@@ -380,12 +381,12 @@ public function registroAdministrativo(Request $request) {
|
|
|
|
|
|
$nombreArchivo = time() . '_' . $request->idAlumno . '_' . preg_replace('/[^a-zA-Z0-9._-]/', '', $archivo->getClientOriginalName());
|
|
|
|
|
|
- // Subir directamente a S3
|
|
|
+ // Subir a S3
|
|
|
$rutaS3 = 'constancias_fiscales/' . $nombreArchivo;
|
|
|
Storage::disk('s3')->put($rutaS3, file_get_contents($archivo), 'public');
|
|
|
}
|
|
|
|
|
|
- // Guardar datos en BD
|
|
|
+ // Guardar en BD
|
|
|
$registro = [
|
|
|
'idEscuela' => $request->idEscuela ?? 'COLEGIOABC',
|
|
|
'idAlumno' => $request->idAlumno,
|
|
|
@@ -401,7 +402,8 @@ public function registroAdministrativo(Request $request) {
|
|
|
'RegA_DireccionFactura' => $request->domicilioFactura ?? 'NA',
|
|
|
'RegA_CorreoFactura' => $request->correoFactura ?? 'NA',
|
|
|
'RegA_CuentaPago' => $request->cuentaPago ?? 'NA',
|
|
|
- 'RegA_ConstanciaFiscal' => $rutaS3, // Ruta en S3
|
|
|
+ 'RegA_ConstanciaFiscal' => $rutaS3,
|
|
|
+ 'RegA_ArchivoUUID' => $rutaS3 ? $uuidArchivo : null, // UUID para referencia
|
|
|
'RegA_Modalidad' => 'Presencial',
|
|
|
'usuarioRegistro' => $request->usuarioRegistro,
|
|
|
'created_at' => now(),
|
|
|
@@ -418,7 +420,7 @@ public function registroAdministrativo(Request $request) {
|
|
|
$status = 200;
|
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
- // Eliminar archivo si hubo error
|
|
|
+ // Borrar archivo si algo falla
|
|
|
if ($rutaS3 && Storage::disk('s3')->exists($rutaS3)) {
|
|
|
Storage::disk('s3')->delete($rutaS3);
|
|
|
}
|
|
|
@@ -429,11 +431,55 @@ public function registroAdministrativo(Request $request) {
|
|
|
|
|
|
return response()->json([
|
|
|
'mensaje' => $message,
|
|
|
- 'archivo' => $rutaS3
|
|
|
+ 'archivo' => $rutaS3,
|
|
|
+ 'uuid' => $rutaS3 ? $uuidArchivo : null,
|
|
|
], $status);
|
|
|
}
|
|
|
|
|
|
- public function editarRegistroAdmin(Request $request, $id)
|
|
|
+
|
|
|
+
|
|
|
+public function eliminarArchivo(Request $request)
|
|
|
+{
|
|
|
+ try {
|
|
|
+ $request->validate([
|
|
|
+ 'rutaArchivo' => 'required|string'
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $ruta = $request->input('rutaArchivo');
|
|
|
+
|
|
|
+ // Buscar el registro que contiene esta ruta
|
|
|
+ $registro = DB::table('registroadministrativo')
|
|
|
+ ->where('RegA_ConstanciaFiscal', $ruta)
|
|
|
+ ->first();
|
|
|
+
|
|
|
+ if (!$registro) {
|
|
|
+ return response()->json(['mensaje' => 'Registro no encontrado con esa ruta'], 404);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Verificar si el archivo existe en el bucket
|
|
|
+ if (Storage::disk('s3')->exists($ruta)) {
|
|
|
+ Storage::disk('s3')->delete($ruta);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Limpiar campos en la BD
|
|
|
+ DB::table('registroadministrativo')
|
|
|
+ ->where('RegA_ConstanciaFiscal', $ruta)
|
|
|
+ ->update([
|
|
|
+ 'RegA_ConstanciaFiscal' => null,
|
|
|
+ 'updated_at' => now()
|
|
|
+ ]);
|
|
|
+
|
|
|
+ return response()->json(['mensaje' => 'Archivo eliminado correctamente'], 200);
|
|
|
+
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ return response()->json([
|
|
|
+ 'mensaje' => 'Error al eliminar archivo',
|
|
|
+ 'error' => $e->getMessage()
|
|
|
+ ], 500);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+ public function editarRegistroAdmin(Request $request, $id)
|
|
|
{
|
|
|
$message = '';
|
|
|
$status = 0;
|
|
|
@@ -474,6 +520,7 @@ public function registroAdministrativo(Request $request) {
|
|
|
'usuarioRegistro' => 'usuarioRegistro',
|
|
|
];
|
|
|
|
|
|
+ // Procesar cada campo
|
|
|
foreach ($camposMapeo as $campoRequest => $campoBD) {
|
|
|
if ($request->has($campoRequest)) {
|
|
|
$valor = $request->input($campoRequest);
|
|
|
@@ -484,42 +531,45 @@ 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 extensión PDF
|
|
|
+ // Validar que sea un PDF
|
|
|
if (strtolower($extension) !== 'pdf') {
|
|
|
return response()->json(['mensaje' => 'El archivo debe ser PDF'], 400);
|
|
|
}
|
|
|
|
|
|
- // Generar nombre único
|
|
|
+ // Generar nombre único para el archivo
|
|
|
$nombreArchivo = time() . '_' . $idAlumno . '_' . $nombreOriginal;
|
|
|
|
|
|
- // Limpiar y decodificar el contenido base64
|
|
|
+ // Extraer el contenido Base64 (eliminar el prefijo data:application/pdf;base64,)
|
|
|
$base64Str = substr($base64, strpos($base64, ',') + 1);
|
|
|
$contenidoArchivo = base64_decode($base64Str);
|
|
|
|
|
|
- // Validar tamaño (máximo 5 MB)
|
|
|
+ // Validar tamaño del archivo (5MB máximo)
|
|
|
if (strlen($contenidoArchivo) > (5 * 1024 * 1024)) {
|
|
|
return response()->json(['mensaje' => 'El archivo es demasiado grande (máximo 5MB)'], 400);
|
|
|
}
|
|
|
|
|
|
- // Ruta nueva en S3
|
|
|
- $rutaS3 = 'constancias_fiscales/' . $nombreArchivo;
|
|
|
-
|
|
|
- // 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);
|
|
|
+ $rutaDestino = public_path('uploads/constancias_fiscales');
|
|
|
+ if (!file_exists($rutaDestino)) {
|
|
|
+ mkdir($rutaDestino, 0755, true);
|
|
|
}
|
|
|
|
|
|
- // Subir a S3
|
|
|
- Storage::disk('s3')->put($rutaS3, $contenidoArchivo, 'public');
|
|
|
+ // Eliminar archivo anterior si existe
|
|
|
+ if ($registroExistente->RegA_ConstanciaFiscal) {
|
|
|
+ $rutaArchivoAnterior = public_path('uploads/constancias_fiscales/' . $registroExistente->RegA_ConstanciaFiscal);
|
|
|
+ if (file_exists($rutaArchivoAnterior)) {
|
|
|
+ unlink($rutaArchivoAnterior);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- // Guardar nueva ruta
|
|
|
- $datosActualizar['RegA_ConstanciaFiscal'] = $rutaS3;
|
|
|
+ // Guardar el nuevo archivo
|
|
|
+ file_put_contents($rutaDestino . '/' . $nombreArchivo, $contenidoArchivo);
|
|
|
+ $datosActualizar['RegA_ConstanciaFiscal'] = $nombreArchivo;
|
|
|
}
|
|
|
|
|
|
// Campos adicionales
|
|
|
@@ -560,9 +610,11 @@ public function registroAdministrativo(Request $request) {
|
|
|
error_log('ERROR en editarRegistroAdmin: ' . $e->getMessage());
|
|
|
error_log('Stack trace: ' . $e->getTraceAsString());
|
|
|
|
|
|
- // Eliminar archivo nuevo si ocurrió error
|
|
|
- if (isset($rutaS3) && Storage::disk('s3')->exists($rutaS3)) {
|
|
|
- Storage::disk('s3')->delete($rutaS3);
|
|
|
+ if (isset($nombreArchivo) && $nombreArchivo && isset($registroExistente) && $nombreArchivo !== $registroExistente->RegA_ConstanciaFiscal) {
|
|
|
+ $rutaArchivo = public_path('uploads/constancias_fiscales/' . $nombreArchivo);
|
|
|
+ if (file_exists($rutaArchivo)) {
|
|
|
+ unlink($rutaArchivo);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
$message = 'Error interno del servidor: ' . $e->getMessage();
|
|
|
@@ -573,6 +625,7 @@ public function registroAdministrativo(Request $request) {
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
public function getOneRegistroAdmi($id){
|
|
|
$id = base64_decode($id);
|
|
|
$registro = DB::table('registroadministrativo')
|