/*
NOTA SOBRE LOS TIPOS DE RECIBO
1 -> Alojamiento
2 -> Alojamiento
3 -> Alojamiento
4 -> Alojamiento
5 -> Complementos
6 -> Abono
7 -> Fianza (a devolver)
*/
SELECT
/* COUNT(*)-COUNT(*)+1 RES."GrupoQuery", */
"RES"."Vivienda",
RES.Desde Entrada,
RES.Hasta Salida,
RES.Adultos F."Ad.",
RES."Niños" F."Niñ.",
AGENCIAS."Descripción" Cliente,
INQUI.Nombre Inquilino,
RES.Reserva RES."Res.",
SUM(PRECIOSRESERVA.Precio)/COUNT(DISTINCT RECIBOS.Contador) F."Importe$E$SUM",
SUM(RECIBOS.Importe)/COUNT(DISTINCT PRECIOSRESERVA.Contador) F."Cobrado$E$SUM",
SUM(PRECIOSRESERVA.Precio)/COUNT(DISTINCT RECIBOS.Contador) -
SUM(RECIBOS.Importe)/COUNT(DISTINCT PRECIOSRESERVA.Contador) F."Pendiente$E$SUM",
RES.CREACION AS RES."Reservada"
FROM
RESERVAS AS RES,AGENCIAS,INQUI,PRECIOSRESERVA,RECIBOS,
LISTAS_ALOJ_LIN
WHERE
RES.CREACION >= ':1'
AND RES.CREACION-1 <= ':2'
AND AGENCIAS."Código" = RES.Agencia
AND RES.INQUILINO = INQUI."Código"
AND PRECIOSRESERVA.Reserva=RES.Reserva
AND RECIBOS.Reserva=RES.Reserva
AND ( (RECIBOS.TIPO<>5 AND RECIBOS.TIPO<>7) OR RECIBOS.TIPO IS NULL)
AND UPPER(AGENCIAS."Descripción") LIKE UPPER('%:3%')
AND LISTAS_ALOJ_LIN.ID_LISTA =:4
AND LISTAS_ALOJ_LIN.AGRUP=RESERVAS."Agrupación"
AND LISTAS_ALOJ_LIN.VIVIENDA =RESERVAS.Vivienda
GROUP BY
"RES"."Vivienda",
RES.CREACION,
RES.Desde,
RES.Hasta,
RES.Adultos,
RES."Niños" ,
AGENCIAS."Descripción",
INQUI.Nombre,
RES.Reserva
UNION ALL
/*
En este grupo van las reservas que no tienen agrupado ningún cobro.
Nada de nad, de ningún tipo.
*/
SELECT
/* COUNT(*)-COUNT(*)+2 RES."GrupoQuery", */
"RES"."Vivienda",
RES.Desde Entrada,
RES.Hasta Salida,
RES.Adultos F."Ad.",
RES."Niños" F."Niñ.",
AGENCIAS."Descripción" Cliente,
INQUI.Nombre Inquilino,
RES.Reserva RES."Res.",
SUM(PRECIOSRESERVA.Precio) F."Importe$E$SUM",
0 F."Cobrado$E$SUM",
SUM(PRECIOSRESERVA.Precio) F."Pendiente$E$SUM",
RES.CREACION AS RES."Reservada"
FROM
RESERVAS AS RES,AGENCIAS,INQUI,LISTAS_ALOJ_LIN
JOIN PRECIOSRESERVA ON
PRECIOSRESERVA.Reserva=RES.Reserva
FULL OUTER JOIN RECIBOS ON
RECIBOS.Reserva=RES.Reserva
WHERE
RES.CREACION >= ':1'
AND RES.CREACION-1 <= ':2'
AND AGENCIAS."Código" = RES.Agencia
AND RES.INQUILINO = INQUI."Código"
AND UPPER(AGENCIAS."Descripción") LIKE UPPER('%:3%')
AND LISTAS_ALOJ_LIN.ID_LISTA =:4
AND LISTAS_ALOJ_LIN.AGRUP=RESERVAS."Agrupación"
AND LISTAS_ALOJ_LIN.VIVIENDA =RESERVAS.Vivienda
GROUP BY
"RES"."Vivienda",
RES.CREACION,
RES.Desde,
RES.Hasta,
RES.Adultos,
RES."Niños" ,
AGENCIAS."Descripción",
INQUI.Nombre,
RES.Reserva
HAVING
COUNT(DISTINCT RECIBOS.Contador) = 0
UNION ALL
/*
En este último grupo se toman las reservas que tienen anotados complementos o fianzas
pero ningún otro tipo de cobro de alojamiento.
*/
SELECT
/* COUNT(*)-COUNT(*)+3 RES."GrupoQuery", */
"RES"."Vivienda",
RES.Desde Entrada,
RES.Hasta Salida,
RES.Adultos F."Ad.",
RES."Niños" F."Niñ.",
AGENCIAS."Descripción" Cliente,
INQUI.Nombre Inquilino,
RES.Reserva RES."Res.",
SUM(PRECIOSRESERVA.Precio)/COUNT(DISTINCT RECIBOS.CONTADOR) F."Importe$E$SUM",
0 F."Cobrado$E$SUM",
SUM(PRECIOSRESERVA.Precio)/COUNT(DISTINCT RECIBOS.CONTADOR) F."Pendiente$E$SUM",
RES.CREACION AS RES."Reservada"
FROM
RESERVAS AS RES,AGENCIAS,INQUI,RECIBOS,PRECIOSRESERVA,LISTAS_ALOJ_LIN
WHERE
PRECIOSRESERVA.Reserva=RES.Reserva
AND RECIBOS.Reserva=RES.Reserva
AND RES.CREACION >= ':1'
AND RES.CREACION-1 <= ':2'
AND AGENCIAS."Código" = RES.Agencia
AND RES.INQUILINO = INQUI."Código"
AND UPPER(AGENCIAS."Descripción") LIKE UPPER('%:3%')
AND LISTAS_ALOJ_LIN.ID_LISTA =:4
AND LISTAS_ALOJ_LIN.AGRUP=RESERVAS."Agrupación"
AND LISTAS_ALOJ_LIN.VIVIENDA =RESERVAS.Vivienda
GROUP BY
"RES"."Vivienda",
RES.CREACION,
RES.Desde,
RES.Hasta,
RES.Adultos,
RES."Niños" ,
AGENCIAS."Descripción",
INQUI.Nombre,
RES.Reserva
HAVING
/* Solo tiene cobros de complemtos */
( COUNT(DISTINCT RECIBOS.TIPO) = 1 AND MIN(RECIBOS.TIPO)=5 AND MAX(RECIBOS.TIPO)=5 )
/* Solo tiene cobros de fianza (a devolver) */
OR ( COUNT(DISTINCT RECIBOS.TIPO) = 1 AND MIN(RECIBOS.TIPO)=7 AND MAX(RECIBOS.TIPO)=7 )
/* Tiene cobros de complementos y de fianza */
OR ( COUNT(DISTINCT RECIBOS.TIPO) = 2 AND MIN(RECIBOS.TIPO)=5 AND MAX(RECIBOS.TIPO)=7 )
ORDER BY
RES.Desde,
RES.Vivienda,
RES.CREACION