You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
6.3 KiB
171 lines
6.3 KiB
<?php |
|
|
|
namespace App\Models; |
|
|
|
use DB; |
|
use Illuminate\Database\Eloquent\Factories\HasFactory; |
|
use Illuminate\Database\Eloquent\Model; |
|
|
|
/** |
|
* Modelo Eloquent para la tabla `uader_mapuche_persona`. |
|
|
|
* Este modelo representa los datos de las personas en el sistema Mapuche. |
|
*/ |
|
class UaderMapuchePersona extends Model |
|
{ |
|
use HasFactory; |
|
|
|
protected $table = "uader_mapuche_persona"; |
|
|
|
/** |
|
* Obtiene la lista de familiares asociados a una persona. |
|
* |
|
* Utiliza la relación 'hasMany' para recuperar los registros de la tabla 'uader_mapuche_familiares' |
|
* relacionados con el identificador de la persona en la tabla actual. |
|
* |
|
* @return Illuminate\Database\Eloquent\Collection Una colección de objetos UaderMapucheFamiliares. |
|
*/ |
|
public function familiares() |
|
{ |
|
return $this->hasMany( |
|
UaderMapucheFamiliares::class, |
|
"id_uader_mapu_pers", |
|
"id" |
|
); |
|
} |
|
|
|
/** |
|
* Obtiene la localidad a la que pertenece una persona. |
|
* |
|
* Utiliza la relación 'hasOne' para recuperar el registro de la tabla 'mapuche_ciudades' |
|
* asociado al identificador de la localidad en la tabla actual. |
|
* |
|
* @return Illuminate\Database\Eloquent\Model|null El objeto MapucheCiudades |
|
* representando la localidad, o null si no se encuentra. |
|
*/ |
|
public function localidad() |
|
{ |
|
return $this->hasOne(MapucheCiudades::class, "id", "localidad_id"); |
|
} |
|
|
|
/** |
|
* Obtiene la declaración jurada asociada a una persona. |
|
* |
|
* Utiliza la relación 'hasOne' para recuperar el registro de la tabla 'uader_dj_persona' |
|
* asociado al identificador de la declaración jurada en la tabla actual. |
|
* |
|
* @return Illuminate\Database\Eloquent\Model|null El objeto UaderDjPersona |
|
* representando la declaración jurada, o null si no se encuentra. |
|
*/ |
|
public function declaracion_jurada() |
|
{ |
|
return $this->hasOne(UaderDjPersona::class, "id", "id_dj_persona"); |
|
} |
|
|
|
/** |
|
* Obtiene la provincia a la que pertenece una persona. |
|
* |
|
* Utiliza la relación 'hasOne' para recuperar el registro de la tabla 'mapuche_provincias' |
|
* asociado al código de provincia en la tabla actual. |
|
* |
|
* @return Illuminate\Database\Eloquent\Model|null El objeto MapucheProvincias |
|
* representando la provincia, o null si no se encuentra. |
|
*/ |
|
public function provincia() |
|
{ |
|
return $this->hasOne( |
|
MapucheProvincias::class, |
|
"codigo_pcia", |
|
"codigo_provincia" |
|
); |
|
} |
|
|
|
/** |
|
* Busca los datos de una persona y su ultima declaracion juarada por su número de teléfono. |
|
* |
|
* Elimina los guiones y el prefijo '15' del número de teléfono antes de realizar la búsqueda. |
|
* 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 $telefono El número de teléfono de la persona a buscar. |
|
* @return UaderMapuchePersona|null El objeto UaderMapuchePersona |
|
* representando la persona encontrada, o null si no se encuentra. |
|
*/ |
|
public static function buscarPersonaPorTelefono(string $telefono) |
|
{ |
|
return self::buscarPersona("telefono", $telefono); |
|
} |
|
|
|
/** |
|
* 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 $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(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) |
|
{ |
|
$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 self::where( |
|
"id_dj_persona", |
|
$ultimaDeclaracionJurada->id_dj |
|
)->first(); |
|
} |
|
}
|
|
|