Browse Source

Mejora en funciones de busqueda de persona por dni/telefono.

Se pasa a una funcion generica con filtros flexibles.
main
jirho 1 year ago
parent
commit
98726b99df
  1. 102
      src/app/Models/UaderMapuchePersona.php

102
src/app/Models/UaderMapuchePersona.php

@ -15,7 +15,7 @@ class UaderMapuchePersona extends Model
{ {
use HasFactory; use HasFactory;
protected $table = 'uader_mapuche_persona'; protected $table = "uader_mapuche_persona";
/** /**
* Obtiene la lista de familiares asociados a una persona. * Obtiene la lista de familiares asociados a una persona.
@ -27,7 +27,11 @@ class UaderMapuchePersona extends Model
*/ */
public function familiares() 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() 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() 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() 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 * @return UaderMapuchePersona|null El objeto UaderMapuchePersona
* representando la persona encontrada, o null si no se encuentra. * representando la persona encontrada, o null si no se encuentra.
*/ */
public static function BuscarPersonaPorTelefono($telefono) public static function buscarPersonaPorTelefono(string $telefono)
{ {
return self::buscarPersona("telefono", $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();
} }
/** /**
* 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). * 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). * 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 * @return UaderMapuchePersona|null El objeto UaderMapuchePersona
* representando la persona encontrada, o null si no se encuentra. * representando la persona encontrada, o null si no se encuentra.
*/ */
public static function buscarPersonaPorDni($dni) public static function buscarPersonaPorDni(string $dni)
{ {
$persona = DB::table('uader_mapuche_persona') return self::buscarPersona("dni", $dni);
->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']) * Busca una persona en el sistema según el tipo de filtro especificado (DNI o teléfono).
->orderBy('uader_dj_persona.fecha_cierre', 'desc') *
->first(); * 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).
if (empty($persona)) { * 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)
{
$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 null;
} }
return UaderMapuchePersona::where('id_dj_persona', $persona->id_dj)->first(); return self::where('id_dj_persona', $ultimaDeclaracionJurada->id_dj)->first();
} }
} }

Loading…
Cancel
Save