diff --git a/src/app/Models/UaderMapuchePersona.php b/src/app/Models/UaderMapuchePersona.php index 80b8a30..7c4438b 100644 --- a/src/app/Models/UaderMapuchePersona.php +++ b/src/app/Models/UaderMapuchePersona.php @@ -15,7 +15,7 @@ class UaderMapuchePersona extends Model { use HasFactory; - protected $table = 'uader_mapuche_persona'; + protected $table = "uader_mapuche_persona"; /** * Obtiene la lista de familiares asociados a una persona. @@ -27,7 +27,11 @@ class UaderMapuchePersona extends Model */ public function familiares() { - return $this->hasMany(UaderMapucheFamiliares::class, 'id_uader_mapu_pers', 'id'); + return $this->hasMany( + UaderMapucheFamiliares::class, + "id_uader_mapu_pers", + "id" + ); } /** @@ -41,7 +45,7 @@ class UaderMapuchePersona extends Model */ public function localidad() { - return $this->hasOne(MapucheCiudades::class, 'id', 'localidad_id'); + return $this->hasOne(MapucheCiudades::class, "id", "localidad_id"); } /** @@ -55,7 +59,7 @@ class UaderMapuchePersona extends Model */ public function declaracion_jurada() { - return $this->hasOne(UaderDjPersona::class, 'id', 'id_dj_persona'); + return $this->hasOne(UaderDjPersona::class, "id", "id_dj_persona"); } /** @@ -69,7 +73,11 @@ class UaderMapuchePersona extends Model */ public function provincia() { - return $this->hasOne(MapucheProvincias::class, 'codigo_pcia', 'codigo_provincia'); + return $this->hasOne( + MapucheProvincias::class, + "codigo_pcia", + "codigo_provincia" + ); } /** @@ -83,48 +91,76 @@ class UaderMapuchePersona extends Model * @return UaderMapuchePersona|null El objeto UaderMapuchePersona * representando la persona encontrada, o null si no se encuentra. */ - public static function BuscarPersonaPorTelefono($telefono) + public static function buscarPersonaPorTelefono(string $telefono) { - - $persona = DB::table('uader_mapuche_persona') - ->join('uader_dj_persona', 'uader_mapuche_persona.id_dj_persona', '=', 'uader_dj_persona.id') - ->selectRaw('uader_mapuche_persona.id_dj_persona as id_dj') - ->whereRaw("'549'||REGEXP_REPLACE(telefono_celular, '-|-15','','g') = '$telefono'") - ->whereIn('uader_dj_persona.estado', ['C', 'V']) - ->orderBy('uader_dj_persona.fecha_cierre', 'desc') - ->first(); - - if (empty($persona)) { - return null; - } - - return UaderMapuchePersona::where('id_dj_persona', $persona->id_dj)->first(); + return self::buscarPersona("telefono", $telefono); } + /** - * Busca los datos de una persona y su ultima designación por su número de documento (DNI). + * Busca los datos de una persona y su ultima declaracion juarada por el DNI. * * Solo considera personas con estado de declaración jurada 'C' (Completa) o 'V' (Verificada). * Ordena los resultados por la fecha de cierre de la declaración jurada (descendente). * - * @param string $dni El número de documento de la persona a buscar. + * @param string $telefono El número de documento de la persona a buscar. * @return UaderMapuchePersona|null El objeto UaderMapuchePersona * representando la persona encontrada, o null si no se encuentra. */ - public static function buscarPersonaPorDni($dni) + public static function buscarPersonaPorDni(string $dni) + { + return self::buscarPersona("dni", $dni); + } + + /** + * Busca una persona en el sistema según el tipo de filtro especificado (DNI o teléfono). + * + * La función realiza una búsqueda en la base de datos para encontrar una persona + * que tenga una declaración jurada en estado "C" (cerrado) o "V" (validado). + * Se aplica un filtro de búsqueda según el DNI o el teléfono proporcionado. + * + * @param string $tipoFiltro El tipo de filtro a aplicar, puede ser "dni" o "telefono". + * @param string $valor El valor del filtro (DNI o teléfono) que se utilizará para la búsqueda. + * + * @return \App\Models\Persona|null Retorna el registro de la persona encontrada o null si no existe. + * + * @throws \InvalidArgumentException Si el tipo de filtro no es soportado. + */ + + public static function buscarPersona(string $tipoFiltro, string $valor) { - $persona = DB::table('uader_mapuche_persona') - ->join('uader_dj_persona', 'uader_mapuche_persona.id_dj_persona', '=', 'uader_dj_persona.id') - ->selectRaw('uader_mapuche_persona.id_dj_persona as id_dj') - ->whereRaw("uader_mapuche_persona.nro_docum = '$dni'") - ->whereIn('uader_dj_persona.estado', ['C', 'V']) - ->orderBy('uader_dj_persona.fecha_cierre', 'desc') - ->first(); - - if (empty($persona)) { + $declaracionesJuradas = self::join( + "uader_dj_persona", + "uader_mapuche_persona.id_dj_persona", + "=", + "uader_dj_persona.id" + ) + ->selectRaw("uader_mapuche_persona.id_dj_persona as id_dj") + ->whereIn("uader_dj_persona.estado", ["C", "V"]) + ->orderBy("uader_dj_persona.fecha_cierre", "desc"); + + // Aplicar la lógica de búsqueda según el tipo de filtro + switch ($tipoFiltro) { + case "dni": + $declaracionesJuradas->where("uader_mapuche_persona.nro_docum", $valor); + break; + + case "telefono": + $declaracionesJuradas->whereRaw("'549'||REGEXP_REPLACE(telefono_celular, '-|-15','','g') = '$valor'"); + break; + + default: + throw new \InvalidArgumentException( + "Filtro de búsqueda no soportado: $tipoFiltro" + ); + } + + $ultimaDeclaracionJurada = $declaracionesJuradas->first(); + if (empty($ultimaDeclaracionJurada)) { return null; } - return UaderMapuchePersona::where('id_dj_persona', $persona->id_dj)->first(); + return self::where('id_dj_persona', $ultimaDeclaracionJurada->id_dj)->first(); + } }