Cómo ABCD determina si se puede reservar
Para determinar si se puede realizar una reserva se ejecuta el siguiente procedimiento (script: reserve/buscar.php):
1) Localización de los ejemplares seleccionados mediante a expresión de búsqueda: Función: EjecutarBusqueda
Aplica la búsqueda sobre la base de datos catalográfica. Para formar el query se construye un formato de despliegue obtenido a partir de la concatenación de los archivos de configuración loans_cn.pft, el cual llamaremos $Pft_cn, y se utiliza para extraer el número de control del registro, y el archivo loans_display.pft, el cual llamaremos $Pft, que contiene el formato con el cual se va a desplegar el registro de base de datos catalográfica. El formato que se envía el script se construye como:
$Pft."'$$$$'".$Pft_cn."'####'"
Para cada registro recuperado obtendremos el registro formateado (el valor que antecede $$$$
) y el valor correspondiente al número del control (el valor que sigue a $$$$
). ####
es un separador que nos permite separar cada uno de los registros recuperados en la consulta
2) Determinación del tipo de usuario: Función: ExtraerTipoUsuario
A partir del código de usuario suministrado se extrae el tipo de usuario
3) Localización de los ejemplares prestados: Función: Disponibilidad
Se determinan los ejemplares disponibles de la siguiente manera:
Se realiza una búsqueda sobre la base de datos de transacciones de préstamo a fin de verificar si hay ejemplares prestados. La expresión que se aplica es:
**ON_P_nnnnn**
donde: **ON** corresponde al prefijo aplicado en la fst de la base de datos trans para
indizar los registros por número de control
**P** indica que el registro corresponde a un préstamo
**nn** es el número de control obtenido en 1)
Si la búsqueda no recupera registros se asume que no hay ejemplares prestados por lo que la reserva no aplica. Si se recuperan registros, se compara el nombre de la base de datos grabado en la transacción con el nombre de la base de datos sobre la cual se está procesando la reserva. Si son iguales entonces se suma 1 al total de ejemplares prestados. Además se almacena el código de usuario que tiene préstamos a fin de determinar si no está solicitando una reserva sobre un título que ya tiene prestado
Si la búsqueda recupera registros, entonces hay que determinar la disponibilidad a través de la base de datos loanobjects (si se usa copies a través de la función LocalizarCopiasLoanobjects) o utilizando el registro catalográfico (si no se utiliza copies a través de la función LocalizarCopias). En ambos casos se envía el número de control, las transacciones extraídas de trans y el tipo de usuario (obtenido en 2). De esta forma obtenemos el total de copias prestadas (A)
4) Determinación de los ejemplares disponibles cuando se trabaja con copies: Función LocalizarCopiasLoanobjects
Sobre la base de datos loanobjects de aplica la expresión “CN_”.$arrHttp[“base”].”_”.$control_number, donde $arrHttp[“base”] es el nombre de la base de datos catalográfica y $control_number es el número de control del registro catalográfico obtenido en 1). En el query se usa coo formato de extracción
(if p(v959) then v959^i,'||',v959^o/ fi)
el cual recuperará todas las copias disponibles separando el número de inventario del tipo de objeto
utilizando el tipo de usuario obtenido en 2 y el tipo de objeto resultante del query se determina, a través de la política, las copias que se puede reservar (las copias no se pueden reservar si el elemento 11 de la política tiene el valor N). Como se recorren todas las copias del registro de loanobjects, al final obtendremos el número de copias habilitadas para la reserva (B)
5 Determinación de los ejemplares disponibles cuando no se trabaja con copies: Función LocalizarCopias
Si la base de datos no trabaja con copies Se usa el archivo de configuración loans_conf.tab para determinar el prefijo a utilizar en la localización del número de control y del número inventario. Adicionalmente se usan los formatos loans_inventorynumber.pft (que llamaremos $pft_totalitems) para extraer el número de inventario y loans_typeofobject.pft (que llamaremos $pft_typeofr) para extraer el tipo de objeto. Con estos dos formatos construímos el formato a aplicar sobre la base de datos catalográfica para extraer las copias disponibles:
$Pft="($pft_totalitems'||'".$pft_typeofr."/)/";
Note que estamos construyendo un grupo repetible para extraer los ejemplares, donde obtendremos el número de inventario separado con | del tipo de objeto. |
Aplicamos el query sobre la base de datos catalográfica utilizando como expresión de búsqueda el número de control del registro y obtendremos como resultado la lista de los números de inventario con el tipo de objeto correspondiente
utilizando el tipo de usuario obtenido en 2 y el tipo de objeto resultante del query se determina, a través de la política, las copias que se puede reservar (las copias no se pueden reservar si el elemento 11 de la política tiene el valor N; si tiene Y o está en blanco, entonces si se acepta la reserva). Como se recorren todas las copias del registro catalográfico, al final obtendremos el número de copias habilitadas para la reserva (B)
6 Teniendo los valores:
A: Total de copias prestadas
B: Total de copias que se pueden reservar
Establecemos como condición para que se pueda reservar si
B>0 y B-A<=0